C++转换运算符

aas*_*tic 1 c++ constructor operator-overloading copy-constructor

我知道这个交易.编译器尝试在转换运算符的帮助下将一个对象转换为其他对象的类型.有两种方法可以做到这一点.Constructor(将类转换为另一个)或转换运算符.所以,这个只是为了测试我是否彻底了解了这些概念.下面的代码给出了错误

using namespace std ;
class A
{
    int i ;
    public:
            A(int a=0){this->i=a;}
            A operator+(const A& b){
                    A c ;
                    return c(this->i+b.i);
            }
            void show()
            {
                    cout<<i<<endl;
            }
 };
int main()
{
    A a1(1),a2(2),a3;
    a3=a2+a1;
    a3.show();
    return 0;
 }
Run Code Online (Sandbox Code Playgroud)

我猜错误是在运算符+.当我尝试分配A(i).对于可以从int创建A的运算符没有匹配.

但后来我看到这个A的构造函数潜伏在后面.它可以将一个int转换为一个.Suppose,它确实将int转换为A.然后,调用变为A(B).这相当于复制构造函数.Hence,this电话应该工作.但它没有.总而言之,我很困惑.

请帮忙 .

Fri*_*igo 7

在这两行中,您告诉编译器使用默认构造函数构造A对象,然后调用其不存在的operator()(int)并返回其返回值:

                A c ;
                return c(this->i+b.i);
Run Code Online (Sandbox Code Playgroud)

使用其中之一

A c(i + b.i);
return c;
Run Code Online (Sandbox Code Playgroud)

要么

return A(i + b.i);
Run Code Online (Sandbox Code Playgroud)

在旁注中,为您的类隐式转换运算符的示例:

operator int () const
{
    return i;
}
Run Code Online (Sandbox Code Playgroud)

但是它们的使用闻起来像是糟糕的设计,并且会导致坏事发生,比如隐式转换为bool或指针.使用别的东西,比如int toInt () const成员函数.