class对 赋值 和 初始化 的理解和区别

早上起来闲来无事写了段代码
先看吧

#include <bits/stdc++.h>
using namespace std;
class Num{
    int real,imag;
public:
    Num(int real,int imag):real(real),imag(imag){cout<<"calling constructing"<<endl;}
    Num(){}
    Num(const Num&n){
        cout<<"calling copy"<<endl;
        real=n.real;
        imag=n.imag;
    }
    Num operator +(const Num&n){
        cout<<"calling +"<<endl;
        return {real+n.real,imag+n.imag};
    }
    Num operator =(const Num&n){
        cout<<"calling ="<<endl;
        real=n.real;
        imag=n.imag;
    }
};

int main(){
    Num N1(5,6);
    Num N2(6,9);
    Num N3=N1+N2;


    return 0;
}

本来预期是
2个constructing
1个calling +
1个calling =

后来发现

在这里插入图片描述
原因是:
N1+N2在重载+号运算符里也调用了构造函数,(多出来的constructing)

Num N3=N1+N2是初始化,不是赋值(少了的calling =)

验证
改为
在这里插入图片描述

则有
在这里插入图片描述
反思:
对于这种class自定义,一定要看好参数类型,尤其是注意右值和左值的区别。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值