恶变133 2015-10-22 04:23 采纳率: 33.3%
浏览 1566

大神帮看一下代码,为什么t5 = addC(a1, a2)中,只调用了一次copy构造函数?

 #include<iostream>

using namespace std;

class  ABC
{
public:
    ABC(int a = 0, int b = 0)
    {
        this->a = a;
        this->b = b;
        printf("我是有参构造函数!\n");
    }
    ABC(ABC &c)
    {
        this->a = c.a;
        this->b = c.b;
        printf("我是copy构造函数!\n");
    }
    //成员函数 
    ABC addC(ABC &c)
    {
        //1.实例化t1
        //2.实例化匿名对象
        //3.t1调用构造函数给匿名对象赋值
        //4.ti被析构
        ABC t1(this->a + c.a, this->b + c.b);
        return t1;
    }
    ABC& addC2(ABC &c)//返回一个引用,相当于自身
    {
        this->a = this->a + c.a;
        this->b = this->b + c.b;
        return *this; //把*(&调用者)回到了调用者元素
    }
    //成员函数 
    void PrintABC()
    {
        printf("t2->a:%d,t2->b:%d\n", this->a, this->b);
    }
    ~ABC()
    {
        printf("我是析构函数!\n");
    }
public:
    int a;
    int b;
};
//全局函数
//成员函数 转为全局函数 多了一个参数
void PrintABC(ABC *t2)
{
    printf("t2->a:%d,t2->b:%d\n", t2->a, t2->b);
}

//全局函数
//全局函数转成 成员函数 少了一个参数
ABC addC(ABC &c, ABC &d)
{
    //1.实例化temp
    //2.实例化匿名对象
    //3.temp调用构造函数给匿名对象赋值
    //4.temp被析构
    ABC temp(c.a + d.a, c.b + d.b);
    return temp;
}

void main()
{
    ABC a1(1, 2);
    ABC a2(3, 4);

    ABC a3;
    //全局函数方法
    a3 = addC(a1, a2);

    //成员函数方法
    {
        ABC a4 = a1.addC(a2); //匿名对象直接转化为 t4(直接转化,不调用copy构造函数)
        a4.PrintABC();
        ABC t5;
        printf("=====================\n");
        t5 = addC(a1, a2);//匿名对象赋值给t5
        t5.PrintABC();
    }
    system("pause");
}
  • 写回答

6条回答 默认 最新

  • cxlovu 2015-10-22 05:51
    关注

    t5 = addC(a1, a2);//匿名对象赋值给t5 这句话是不是有问题啊

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器