博客
关于我
C++派生类和重载赋值运算符以及和复制构造函数的调用运行逻辑实例
阅读量:238 次
发布时间:2019-03-01

本文共 839 字,大约阅读时间需要 2 分钟。

C++ 中的派生类(Derived Class)继承自基类(Base Class),并且在基类中定义了赋值运算符(operator=),这样当派生类对象进行赋值时,会调用基类中的赋值方法。这种机制确保了即使派生类有自己的成员,赋值操作仍能按照预期工作。

在本例中,CBase 是一个基类,定义了一个默认构造函数和一个复制构造函数。它的 operator= 方法允许将一个 CBase 对象赋值给另一个 CBase 对象。CDerivedCBase 的派生类,定义了自己的构造函数和复制构造函数。

当使用 d2 = d1 时,由于 CDerived 中没有定义 operator=, 所以会调用 CBase 中的 operator=, 这会将 d1 中的 a 值赋值给 d2。然而,这种方式可能无法正确处理 CDerived 类中的新成员 b,因为基类的赋值操作只处理已知的成员。

为了确保 CDerived 对象的完整赋值,通常需要在派生类中定义 operator=。如果派生类中没有定义 operator=, 基类的赋值方法会被调用,但这可能导致仅部分成员被赋值,或者未处理派生类特有的成员。

例如,在本例中,如果 CDerived 有自己的成员 b,并且在 operator= 中没有正确处理 b,那么 d2 = d1 可能只赋值 a 而忽略 b。因此,正确的做法是定义派生类的 operator= 来处理所有成员的赋值,确保所有成员都被正确复制。

此外,复制构造函数(copy constructor)用于在派生类中初始化对象,通常用于避免深拷贝带来的内存泄漏。例如,CDerived d3(d2); 会调用 CBase 的复制构造函数,这会先初始化基类成员 a,然后派生类会处理 b

总结来说,派生类在赋值时,使用基类的 operator= 会导致基类成员被赋值,但派生类特有的成员可能需要在派生类的 operator= 中进行处理,以确保所有成员都被正确处理。

转载地址:http://wszt.baihongyu.com/

你可能感兴趣的文章
Objective-C实现声音录制播放程序(附完整源码)
查看>>
Objective-C实现备忘录模式(附完整源码)
查看>>
Objective-C实现复制粘贴文本功能(附完整源码)
查看>>
Objective-C实现复数类+-x%(附完整源码)
查看>>
Objective-C实现外观模式(附完整源码)
查看>>
Objective-C实现多尺度MSR算法(附完整源码)
查看>>
Objective-C实现多种方法求解定积分(附完整源码)
查看>>
Objective-C实现多组输入(附完整源码)
查看>>
Objective-C实现多项式函数在某个点的评估算法(附完整源码)
查看>>
Objective-C实现多项式哈希算法(附完整源码)
查看>>
Objective-C实现大位数乘法(附完整源码)
查看>>
Objective-C实现大根堆(附完整源码)
查看>>
Objective-C实现奇偶检验码(附完整源码)
查看>>
Objective-C实现奇偶转置排序算法(附完整源码)
查看>>
Objective-C实现奇异值分解SVD(附完整源码)
查看>>
Objective-C实现子集总和算法(附完整源码)
查看>>
Objective-C实现字符串boyer moore search博耶摩尔搜索算法(附完整源码)
查看>>
Objective-C实现字符串IP地址转DWORD地址(附完整源码)
查看>>
Objective-C实现字符串jaro winkler算法(附完整源码)
查看>>
Objective-C实现字符串manacher马拉车算法(附完整源码)
查看>>