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

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

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

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

当使用 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/

你可能感兴趣的文章
python中一个好的持久同步队列
查看>>
Python中不准确的对数
查看>>
python中什么是实例方法_在Python中创建实例方法对象的不同方法
查看>>
Python中使用cutecharts实现简单的手绘风格的图表
查看>>
python中使用dxfgrabber,解析dxf文件信息生成obj文件
查看>>
Python中使用ncmbot玩转网易云音乐
查看>>
Python中使用PIL快速实现二值图
查看>>
Python中使用PIL快速实现灰度图
查看>>
Python中使用pip install ncmbot时各种错误解决办法
查看>>
Python中使用requests和parsel爬取喜马拉雅电台音频
查看>>
Python中使用turtle绘制多个同心圆
查看>>
Python中使用turtle绘制棋盘详解
查看>>
Python中使用wordcloud生成漂亮的中文词云
查看>>
Python中使用wxpy定时机器人给微信好友发送每日一文
查看>>
Python中使用zip()并行迭代
查看>>
Python中使用推导式创建序列
查看>>
Python中信号处理程序和atexit处理程序的调用
查看>>
Python中关于txt的简单读写模式与操作
查看>>
Python中关于类和函数的初体验之"__init__"和"__str__"不是"_init_"和"_str_"
查看>>
python中函数接受参数为*args, **kwargs怎么办
查看>>