重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
这篇文章主要介绍了c/c++赋值函数的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
创新互联公司专业为企业提供徐水网站建设、徐水做网站、徐水网站设计、徐水网站制作等企业网站建设、网页设计与制作、徐水企业网站模板建站服务,10余年徐水做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。首先c++里的各种运算符都是用函数实现的,比如=,就等号函数。
所以当用=给一个对象赋值的时候,实际调用的是=号所对应的=号函数。
分析下面的代码
#includeusing namespace std; class Test{ public: explicit Test(){ data = 0; } explicit Test(int d):data(d){ cout << "C:" << this << ":"<< this->data << endl; } //拷贝构造函数 Test(const Test &t){ cout << "Copy:" << this << endl; data = t.data; } //重载=号运算符 Test& operator= (const Test &t){ cout << "assign" << this << endl; if(this != &t){ data = t.data; } return *this; } ~Test(){ cout << "F:" << this << ":" << this->data << endl; } private: int data; }; int main(){ Test t1(10); Test t2, t3; t3 = t2 = t1; return 0; }
重点分析下面的函数
//重载=号运算符 Test& operator = (const Test &t){ cout << "assign" << this << endl; if(this != &t){ data = t.data; } return *this; }
分析点:
1,operator =是什么意思
2,参数为什么是引用类型
3,参数为什么有const限制
4,为什么有if(this != &t)的判断
5,为什么有返回值
6,为什么返回值的类型是引用类型
分析点解答:
Test t2;
t2 = t1;//实际的运作方式是t2.operator=(t1),所以函数里面的this就是t2
1,重载类Test的=号函数,当对类Test的对象用=号操作的时候,就会调用这个重载后的函数
2,避免调用拷贝构造函数
3,避免不小心修改里参数t里面成员变量的值(t.data = 100;)
4,防止自己给自己赋值
5,为了能够使用 t3 = t2 = t1。如果没有返回值,则t3.operator=(t2=t1),的参数里面t2=t1就没有返回值,所以编译不过。
6,不是引用也可以,用引用类型是防止老版本的编译器,在return处调用拷贝构造函数,新版本的编译器(gcc 4.8.5-20),即使不用引用类型,就不会调用拷贝构造函数。
感谢你能够认真阅读完这篇文章,希望小编分享的“c/c++赋值函数的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持创新互联建站,关注创新互联网站建设公司行业资讯频道,更多相关知识等着你来学习!
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。