您的位置:首页 > 房产 > 家装 > 网页设计论文初稿_品牌型网站有哪些_企业网络营销推广案例_经营管理培训课程

网页设计论文初稿_品牌型网站有哪些_企业网络营销推广案例_经营管理培训课程

2024/12/27 19:16:53 来源:https://blog.csdn.net/weixin_42255569/article/details/144744688  浏览:    关键词:网页设计论文初稿_品牌型网站有哪些_企业网络营销推广案例_经营管理培训课程
网页设计论文初稿_品牌型网站有哪些_企业网络营销推广案例_经营管理培训课程

文章目录

    • 条款 12:复制对象时勿忘其每一个成分
      • 核心问题
      • 示例:完整复制对象
      • 示例:提取公共逻辑
      • 设计建议
      • 总结

条款 12:复制对象时勿忘其每一个成分

核心问题

  • 对象的完整性
    在实现复制操作(包括拷贝构造函数和赋值操作符)时,必须确保复制对象的所有成员变量和基类部分,否则可能导致对象不完整或行为异常。

  • 常见误区
    尝试通过一个复制函数(如拷贝构造函数)直接调用另一个复制函数(如赋值操作符)来简化逻辑。这种方法容易导致重复代码或遗漏某些成分。


示例:完整复制对象

实现拷贝构造函数和赋值操作符时,需分别处理成员变量和基类成分。

class Base {
protected:int baseValue;
public:Base(int val) : baseValue(val) {}Base(const Base& rhs) : baseValue(rhs.baseValue) {}  // 复制 Base 成分Base& operator=(const Base& rhs) {if (this != &rhs) {baseValue = rhs.baseValue;}return *this;}
};class Derived : public Base {
private:std::string derivedValue;
public:Derived(int baseVal, const std::string& str) : Base(baseVal), derivedValue(str) {}Derived(const Derived& rhs) : Base(rhs), derivedValue(rhs.derivedValue) {}  // 调用 Base 的拷贝构造函数Derived& operator=(const Derived& rhs) {if (this != &rhs) {Base::operator=(rhs);             // 调用 Base 的赋值操作符derivedValue = rhs.derivedValue;  // 复制 Derived 成分}return *this;}
};

关键点:

  1. 成员变量复制:每个成员变量都需要在复制函数中被正确处理。
  2. 基类复制:显式调用基类的拷贝构造函数或赋值操作符,确保基类成分被完整复制。

示例:提取公共逻辑

为了避免重复代码,可以将共同逻辑提取到一个辅助函数中。

class Widget {
private:int id;std::string name;void copyFrom(const Widget& rhs) {id = rhs.id;name = rhs.name;}public:Widget(int i, const std::string& n) : id(i), name(n) {}Widget(const Widget& rhs) {copyFrom(rhs);  // 使用公共函数处理复制逻辑}Widget& operator=(const Widget& rhs) {if (this != &rhs) {copyFrom(rhs);  // 避免重复代码}return *this;}
};

关键点:

  1. 提取公共逻辑到 copyFrom 函数,减少代码重复。
  2. 确保拷贝构造函数和赋值操作符调用相同的逻辑。

设计建议

  1. 完整性检查

    • 确保每个成员变量和基类成分都被正确复制。
  2. 避免重复代码

    • 提取共同逻辑到辅助函数,提高代码复用性。
  3. 基类与派生类

    • 派生类复制函数应显式调用基类的复制函数。

总结

  • 在实现复制操作时,确保对象的每一个成员变量和基类成分都被正确处理。
  • 避免重复代码,将复制逻辑提取到辅助函数中。
  • 始终遵循良好的设计原则,确保代码的可维护性和正确性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com