对象赋值的疑惑

如果一个类定义了两个或多个对象,则这些同类的对象之间可以互相赋值, 或者说, 一个对象的值可以赋给另一个同类的对象。这里所说的对象的值是指对象中所有的数据成员的值。对象之间的赋值与简单的数据类型一样,也是通过赋值运算符“=”来操作的,这应该算是一种扩展,而实际上赋值运算符的操作是通过符号的重载而实现的,这个过程实际上只是简单的复制了对象中的各个数据成员。对象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

结果也是对的,但是整段程序我纳闷的就是没有发现对于赋值运算符“=”的重载操作,为什么程序仍能得到正确的结果呢?刚才才发现,书的后面还有一句这样的话:对于类对象的运算符一般必须重载, 但有两个例外,运算符“=”和“&”,不必用户重载。”这句话确实来的及时,可以解释上面的结果,但仔细想想,又不太对,如果数据成员有动态内存分配,这个默认的操作那就一定不合适了,难道不让用户来自定义赋值运算符的重载,不能说的这么绝对吧! 疑问


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值