如果一个类定义了两个或多个对象,则这些同类的对象之间可以互相赋值, 或者说, 一个对象的值可以赋给另一个同类的对象。这里所说的对象的值是指对象中所有的数据成员的值。对象之间的赋值与简单的数据类型一样,也是通过赋值运算符“=”来操作的,这应该算是一种扩展,而实际上赋值运算符的操作是通过符号的重载而实现的,这个过程实际上只是简单的复制了对象中的各个数据成员。对象1=对象2;看例子:
//box.cpp
class CBox
{
public:
CBox(){}
CBox(int length, int width, int height): m_length(length), m_width(width),
m_height(height) {}
~CBox(void) {}
public:
int volume(void) { return m_length * m_width * m_height; }
private:
int m_length;
int m_width;
int m_height;
};
int main(void)
{
CBox box1(10, 10, 10), box2;
box2 = box1;
cout << "box1.volume= " << box1.volume() << endl;
cout << "box2.volume= " << box2.volume() << endl;
return 0;
}
//结果:
box1.volume= 1000
box2.volume= 1000
结果也是对的,但是整段程序我纳闷的就是没有发现对于赋值运算符“=”的重载操作,为什么程序仍能得到正确的结果呢?刚才才发现,书的后面还有一句这样的话:对于类对象的运算符一般必须重载, 但有两个例外,运算符“=”和“&”,不必用户重载。”这句话确实来的及时,可以解释上面的结果,但仔细想想,又不太对,如果数据成员有动态内存分配,这个默认的操作那就一定不合适了,难道不让用户来自定义赋值运算符的重载,不能说的这么绝对吧!
