这是一个转换对象的程序,该对象具有包含日期的字符串和另一个具有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;
}
我的困惑在于操作员日期()部分。怎么可以约会运营商?不应该重载=运算符来执行此转换吗?
答案 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
类型并使用它。