0

这是一个程序,用于转换具有包含日期​​的字符串的对象和具有 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; 
}

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

4

2 回答 2

1

这种形式的函数

operator T() { /*return an object of type T*/ }

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

在您的情况下,用户定义的转换函数被定义为将 type 对象隐式转换为 typedmy对象date

void f(date dt);

dmy dmyObj; 

date dateObj = dmyObj; //ok. conversion function is invoked implicitly
f(dmyObj); //ok. conversion function is invoked implicitly
于 2012-04-14T15:54:50.293 回答
0
operator date() 

是一个转换函数,在您的代码date中需要一个dmy类型而使用一个类型时,将隐式调用这个运算符来创建一个date类型并使用它。

于 2012-04-14T15:52:29.117 回答