c++新经典14.6.1重载运算符 王建伟自用

已知Time类没有重载赋值运算符=,而Time类中有一个类类型Tmpclass的成员变量tmpclass,而这个Tmpclass类类型内部却重载了赋值运算符=,那么在这种情况下,执行Time mytime1,mytime2;mytime1 = mytime2;时会发生什么

在C++中,当一个类没有显式地重载赋值运算符(operator=)时,编译器会提供一个默认的赋值运算符。这个默认的赋值运算符会执行成员逐个赋值(memberwise assignment),也就是说,它会将每个成员从一个对象复制到另一个对象。

具体到上述问题,当你执行 mytime1 = mytime2; 并且 Time 类没有重载赋值运算符时,编译器生成的默认赋值运算符会被调用。这个操作将 mytime2 的每个成员(包括基本数据类型成员和类类型成员)赋值给 mytime1 的对应成员。

对于 Time 类中的 Tmpclass 类型成员变量 tmpclass,即使 Time 类没有自定义赋值运算符,成员赋值操作会调用 Tmpclass 类型提供的赋值运算符。因为 Tmpclass 类重载了赋值运算符,所以 Time 类的 tmpclass 成员在赋值时会执行 Tmpclass 的赋值运算符,这通常意味着将执行一些自定义的赋值行为。

这是一个伪代码示例,展示了这种情况的基本结构:

class Tmpclass {
public:
    Tmpclass& operator=(const Tmpclass& rhs) {
        // 自定义赋值行为
        // ...
        return *this;
    }
};

class Time {
public:
    Tmpclass tmpclass;
    // Time 类中没有自定义赋值运算符,所以使用默认的
};

int main() {
    Time mytime1, mytime2;
    // 这里调用了 Time 的默认赋值运算符,
    // 对于 tmpclass 成员,则会调用 Tmpclass 的重载赋值运算符
    mytime1 = mytime2;

    return 0;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值