隐式转换c++xcode4.6.2

Implicit conversion c++ xcode4.6.2

本文关键字:c++xcode4 转换      更新时间:2023-10-16

我是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;