在前面我们提到过:当没有用户定义赋值操作符时,编译器会默认生成一个进行浅型拷贝
如指针不但会赋给指向的值,还会赋给地址,这回产生问题
这个问题对引用而言,适不适用呢?
#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)类中包含指针