当创建一个operator=时,必须从右侧对象中拷贝所有需要的信息到当前的对象
即调用运算符的对象 来完成对类的“赋值”,对于简单的对象,是这样的
//: C12:SimpleAssignment.cpp
// From Thinking in C++, 2nd Edition
// Available at http://www.BruceEckel.com
// (c) Bruce Eckel 2000
// Copyright notice in Copyright.txt
// Simple operator=()
#include <iostream>
using namespace std;
class Value {
int a, b;
float c;
public:
Value(int aa = 0, int bb = 0, float cc = 0.0)
: a(aa), b(bb), c(cc) {}
Value& operator=(const Value& rv) {
a = rv.a;
b = rv.b;
c = rv.c;
return *this;
}
friend ostream&
operator<<(ostream& os, const Value& rv) {
return os << "a = " << rv.a << ", b = "
<< rv.b << ", c = " << rv.c;
}
};
int main() {
Value a, b(1, 2, 3.3);
cout << "a: " << a << endl;
cout << "b: " << b << endl;
a = b;
cout << "a after assignment: " << a << endl;
getchar();
} ///:~
这里 = 左侧的对象拷贝了右侧对象中的所有内容,然后返回它的引用,所有
还可以创建更加复杂的表达式
犯了一个错误。当准备给两个相同类型的对象赋值时,应该首先检查一下
自赋值:这个对象是否对自身赋值了?
一些情况下,无论如何执行这些赋值运算符都是无害的,但如果对类的实现
进行了修改,那么将会持续差异
输出
a: a = 0, b = 0, c = 0
b: a = 1, b = 2, c = 3.3
a after assignment: a = 1, b = 2, c = 3.3