【发布时间】:2011-10-31 14:07:24
【问题描述】:
我对 C++ 在必须进行数学运算时如何转换类型表示怀疑。
下面的代码原样(即只转换为 int 而没有转换为 double )可以正常工作和构建。如果我定义ENABLE_DOUBLE_CAST 不会构建并抱怨operator*。你知道为什么吗?
我的疑惑是2:
- 为什么没有将运算符强制转换为双精度,而是在双精度之间的乘法中使用整数。是因为隐式转换吗?
- 为什么 WITH 强制转换为双重启用(使语法更加清晰)未被考虑?
谢谢
AFG
class CA{
int _m;
public:
CA( int a, int b ){
_m=a*b;
}
operator int (){
std::cout<< "(CA int cast)" ;
return _m;
}
#ifdef ENABLE_DOUBLE_CAST
operator double(){
std::cout << "(CA double cat)";
return 2.3 * _m;
}
#endif
};
int main( int argc, const char** argv){
CA obj_2( 10,20 );
double total_1 = 100.0 * obj_2;
double total_2 = obj_2 * 100.0;
return 0;
}
【问题讨论】:
-
您听说过用户定义的转换,但不是用户定义的
operator*?您需要定义后者。实际上,您必须定义两个版本的operator*。
标签: c++ casting operators operator-overloading