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()部分。日期如何成为运营商?不应该= =运算符超载来执行此转换?

+0

有时您不能重载赋值运算符或添加构造函数,例如如果'date'类型属于一个你不能修改的库,或者你只是想避免引入这个依赖。 – molbdnilo 2012-04-14 16:25:22

回答

0
operator date() 

是一个conversion function,无论在你的代码需要一个date类型,而是正在使用dmy类型,那么这个操作员将被隐式调用创建date类型和使用它。

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 
相关问题