隐式转换c++xcode4.6.2
Implicit conversion c++ xcode4.6.2
我是c++的初学者,我不知道为什么Rational r(2,1)的结果是"r==0.5",我发现cotr没有调用operator()
函数。为什么?
class Rational {
public:
int numerator;
int denominator;
Rational(int a = 2, int b = 1)
{
cout<< "cotr"<<endl;
numerator = a;
denominator = b;
};
operator double() const
{
cout<< "()"<<endl;
return (double)this->denominator/this->numerator;
};
};
int main(int argc, const char * argv[])
{
Rational r(2, 1);
cout << "_____"<< endl;
cout << r << endl;
cout << r.numerator << " " << r.denominator << endl;
double d = 0.5*r;
cout << d;
return 0;
}
将分母除以分子,在operator double() const
中交换两者:)
operator double() const
{
cout<< "()"<<endl;
return ((double)this->numerator)/this->denominator;
};
ctor不会调用operator double()
函数,只有当您尝试将Rational
强制转换为double
时才会调用它。即:
Rational frac(5, 7);
double result = (double)frac;
编辑
如果你想对你的输出进行更多的控制,那么你可以重载`operator<lt;'这样你就可以把自己的数据输入到cout中。以下是我实现它的方法:
在你的类定义中:
friend std::ostream& operator<< (std::ostream& stream, const Rational& ra);
以及源文件中的某个位置:
std::ostream& operator<< (std::ostream& stream, const Rational& ra)
{
return stream << ra.numerator << ", " << ra.denominator;
// or: return stream << (int)ra;
// or: return stream << (double)ra;
}
然后你可以打电话:
cout << ra << endl;
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 隐式转换c++xcode4.6.2