该函数如何成为重载运算符?

时间:2012-04-14 15:49:35

标签: c++ operator-overloading assignment-operator data-conversion

这是一个转换对象的程序,该对象具有包含日期​​的字符串和另一个具有3个整数的对象:日期,月份和年份。

class date
{
private:
char dt[9];

public: 
//constructors and functions....
};

class dmy
{
private: 
int day,mth,yr;

public:
//constructors..

  operator date()   // This is what my question is about
  {
   char temp[3],str[9]
   itoa(day,str,10)
   strcat(str,"/");
  itoa(mth,temp,10);
  strcat(str,temp)
  strcat(str,"/");
  itoa(yr,temp,10);
  strcat(str,temp);

  return (date(str));
  }

};

int main
{
 date d1;
 dmy d2(17,11,94);

 d1=d2;

 //display d1's and d2's data
 return 0; 
}

我的困惑在于操作员日期()部分。怎么可以约会运营商?不应该重载=运算符来执行此转换吗?

2 个答案:

答案 0 :(得分:1)

这种形式的功能
operator T() { /*return an object of type T*/ }

称为用户定义的转换函数,当任何表达式中需要类型为T的对象时,该函数将被隐式调用。

在您的情况下,用户定义的转换函数被定义为将dmy类型的对象隐含转换为date类型的对象。

void f(date dt);

dmy dmyObj; 

date dateObj = dmyObj; //ok. conversion function is invoked implicitly
f(dmyObj); //ok. conversion function is invoked implicitly

答案 1 :(得分:0)

operator date() 

conversion function ,只要您的代码中需要date类型,而使用dmy类型,则会隐式调用此运算符创建date类型并使用它。