C++运算符重载(8)

来源:互联网 发布:路渺渺何知礼 编辑:程序博客网 时间:2024/05/16 14:17

在前面我们提到过:当没有用户定义赋值操作符时,编译器会默认生成一个进行浅型拷贝

如指针不但会赋给指向的值,还会赋给地址,这回产生问题

这个问题对引用而言,适不适用呢?

#include <iostream>using namespace std;class myTestTwo {private:int value;int &ref = value;   //创建value的引用public:myTestTwo(int i) {value = i;ref = value;}void myPrint() {cout << ref << endl;}void setValue(int i) {value = i;}};int main() {myTestTwo testA(10);myTestTwo testB(20);testA.myPrint();testB.myPrint();testB = testA;  //提示错误system("PAUSE");return 0;}

这是不被允许的,只能由用户自行创建操作符

myTestTwo& operator = (const myTestTwo& obj) {this->value = obj.value;return *this;}

下面这些情况,编译器不会默认生成操作符

(1)类中包含const或volatile的非静态数据成员

(2)不能被赋值的非静态数据成员(如引用)

(3)被继承的基类不能使用赋值操作符(例如基类中包含引用类型的成员)

(4)类中包含指针





原创粉丝点击