C++学习记录19--运算符重载为什么要使用引用(=)
2017-11-10 09:56
633 查看
重载
这里,赋值函数的返回值是引用和类的拷贝构造函数有关。
实际上,定义为无返回值
若返回值是void,则b=c后数据类型是void,则变成 A=void,报错。
所以为了实现c++中连等的语法需要,讲返回值定义为类的类型比较好。
有返回值时,为什么一定要返回值是引用呢?
当执行到语句
但是万一由于没有定义拷贝构造函数 ,就会调用默认的拷贝构造函数。而默认的拷贝构造函数时当在类中有指针时就会出错(浅拷贝)。
所以如果你不用引用做返回时,就必须自定义的深拷贝构造函数,以防类成员中有指针或引用数据导致出错。
另外拷贝构造函数参数也必须引用
=运算符时,标准定义为
class A { public: A & operator =(line &b) }
这里,赋值函数的返回值是引用和类的拷贝构造函数有关。
实际上,定义为无返回值
void operator =(line &b)也可实现=运算符重载,但使用一个=号时没有问题,使用两个时有会类型不符
A a, b, c; a=b=c; //a=b=c等价于a=(b=c);
若返回值是void,则b=c后数据类型是void,则变成 A=void,报错。
所以为了实现c++中连等的语法需要,讲返回值定义为类的类型比较好。
有返回值时,为什么一定要返回值是引用呢?
当执行到语句
return *this;时,会自动调用类的拷贝构造函数。
但是万一由于没有定义拷贝构造函数 ,就会调用默认的拷贝构造函数。而默认的拷贝构造函数时当在类中有指针时就会出错(浅拷贝)。
所以如果你不用引用做返回时,就必须自定义的深拷贝构造函数,以防类成员中有指针或引用数据导致出错。
另外拷贝构造函数参数也必须引用
A (A &a),否则在函数体中又会调用拷贝构造函数,无限循环。
相关文章推荐
- Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类
- 【C++】学习小笔记系列-4-何时使用引用参数
- Swift学习记录 -- 14.闭包的使用和解决循环引用方法
- OpenCV学习记录(一):使用haar分类器进行人脸识别 标签: opencv脸部识别c++ 2017-07-03 15:59 26人阅读
- C++拷贝构造函数的参数为什么必须使用引用类型
- C++ 学习记录3 --引用
- C++学习总结_为什么要使用指针
- Python学习29:使用特殊的方法定制类(类似于c++的运算符重载)
- cocos2d-x学习笔记19:记录存储3:使用摘要算法进行存档校验 推荐
- 为什么要学习(并使用)C++
- [欢度国庆]为什么我们今天还要学习和使用C++?(转载)
- C++拷贝构造函数的参数为什么必须使用引用类型(无限递归)
- 改善C++ 程序的150个建议学习之建议19:明白在C++中如何使用C
- C++学习记录5--如何使用math.h中定义的PI
- petshop4.0学习记录一:Memebership的使用
- C++ 为什么要同时使用*和&符号?以及什么场合使用这种声明方式?
- 《被误解的C++——学习和使用》的案例
- c++中的引用的使用原理以及使用实例 (2)
- 为什么最好在c++中使用异常
- 关于c++的学习情况,不再更新了,因为找到了更好的笔记记录工具