继承关系中的拷贝构造函数和赋值操作重载函数分析
文章目录
- 1 继承关系中的拷贝构造函数和赋值操作重载函数分析
1 继承关系中的拷贝构造函数和赋值操作重载函数分析
在继承关系中,如果子类未实现拷贝构造函数,那么在子类进行拷贝构造操作时,会直接调用父类的拷贝构造函数,如果父类的拷贝构造函数是私有的,则会编译失败。我们有时候也会故意把父类的拷贝构造函数设置为私有的,从而禁止子类的拷贝构造操作。
在继承关系中,如果子类未实现赋值操作重载函数,那么在子类进行赋值操作时,会直接调用父类的赋值操作重载函数,如果父类的赋值操作重载函数是私有的,则会编译失败。我们有时候也会故意把父类的赋值操作重载函数设置为私有的,从而禁止子类进行赋值操作。
如下代码:
class A
{public:A(){cout << "A()" << endl;}A(const A& obj){cout << "A(const A& obj)" << endl;}A& operator = (const A& obj){cout << "A& operator = (const A& obj)" << endl;return *this;}
};class B : public A
{};int main()
{B b1;B b2(b1);b1 = b2;return 0;
}
输出结果:
一旦子类实现了拷贝构造函数,则在拷贝构造的时候会调用子类的拷贝构造函数和父类的构造函数。子类实现了赋值操作重载函数,则只会调用子类的。
代码如下:
class A
{public:A(){cout << "A()" << endl;}A(const A& obj){cout << "A(const A& obj)" << endl;}A& operator = (const A& obj){cout << "A& operator = (const A& obj)" << endl;return *this;}
};class B : public A
{public:B(){cout << "B()" << endl;}B(const B& obj){cout << "B(const B& obj)" << endl;}B& operator = (const B& obj){cout << "B& operator = (const B& obj)" << endl;return *this;}
};int main()
{B b1;B b2(b1);b1 = b2;return 0;
}
执行结果如下:
继承关系中的拷贝构造函数和赋值操作重载函数分析相关推荐
- C/C++中的拷贝构造函数和赋值构造函数
代码: 1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 class A{ 7 pu ...
- 类与对象:类的6个默认成员函数: 构造函数、析构函数、拷贝构造函数、赋值操作符重载、默认拷贝构造与赋值运算符重载的问题、const成员函数、 取地址及const取地址操作符重载
1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类.任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数. 构造函数 析构函数 拷贝构造函数 赋值操作符重载 const成员函数 ...
- const , 拷贝构造函数,赋值操作符重载
int a1 = 0;const int b1 = 1;int* p0; // 普通指针const int* p1; // 可修改所指对象,但不可修改所指对象的值int const* p2; // 可 ...
- C++ 拷贝构造函数和赋值构造函数
在C++中复制控制是一个比较重要的话题,主要包括复制构造函数.重载赋值操作符.析构函数这三部分,这三个函数是一致的,如果类需要析构函数,则它也需要复制操作符 和 复制构造函数,这个规则被称为 C++的 ...
- 构造函数、拷贝构造函数、赋值函数和析构函数
文章目录 一.构造函数 1.认识构造函数 2.初始化列表 二.拷贝构造函数 1.类对象的拷贝 2.浅拷贝和深拷贝 三.赋值函数 四.析构函数 1.认识析构函数 2.销毁,清理? 3.析构函数来阻止该类 ...
- QObject 的拷贝构造和赋值操作
QOject 中没有提供一个拷贝构造函数和赋值操作符给外界使用,其实拷贝构造和赋值的操作都是已经声明了的,但是它们被使用了Q_DISABLE_COPY () 宏放在了private区域.因此所有继承自 ...
- C++学习笔记-----在重载的赋值运算函数中调用拷贝构造函数
类的拷贝构造函数与赋值运算不同,拷贝构造函数是对这个类进行初始化的过程,而赋值是删除原有的东西,赋予它新的东西. 但是二者在实现上是互通的. template<class T> graph ...
- c++ map 析构函数_C++|类继承关系中的虚函数、虚析构函数、虚基类
在继承关系中,虚函数.虚析构函数.虚基类中使用的关键字virtual都是在告诉编译器,此处要进行特殊处理: 虚函数:函数重写时的要求编译器动态绑定来实现多多态 : 虚析构函数:当基类指针指向在堆内实现 ...
- 拷贝构造函数和赋值函数的一些知识
/*******************拷贝构造函数和赋值运算符重载有以下两个不同之处***************************/ 1.拷贝构造函数生成新的类对象,而赋值运算符不能. 2. ...
最新文章
- 猫晚流量再创记录,阿里云直播方案护航优酷2500万用户体验
- MySQL的日志管理
- Kubernetes-Label
- 系统要不要更新_手机经常弹出“系统更新”,到底要不要更新?用户:后悔已来不及...
- [数论]莫比乌斯反演1
- 第一季3:HI3518E方案整体架构介绍(硬件和软件支持)
- python没有菜单栏_解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
- 2020中国信息流平台品牌服务价值分析
- 榨取kkksc03(洛谷-P1855)
- c语言2L,求助,R8C 2L 如何在C语言定位常数数组到绝对地址
- [Node.js] 模块化 -- path路径模块
- java 强制转换 效率_Java 性能优化:35 个小细节,让你提升 Java 代码的运行效率...
- android实现通知栏搜索功能,actionBar+SearchView实现搜索功能
- 北京大学生物信息学学习(6)隐含马尔可夫模型
- hive教程:启动hive客户端
- 2022国内十大工业级三维视觉引导企业一览
- 二十一条自动化测试过程中遭遇的问题及解决思路
- 优秀工程师应该具备哪些素质_优秀的工程师具有什么品质
- 去除带下划线的word文档答案
- JetBrains又出编程神器!
热门文章
- linux条件表达式例子,Linux的Iptables命令的基本知识(三)-常用匹配条件示例和执行动作...
- java单例注册表_Spring对单例的底层实现,单例注册表
- java 多线程共享数据_Java多线程学习:多个线程间共享数据
- 【PC工具】文件夹多文件群体比较工具beyond compare4
- nginx编译安装,nginx静态资源访问和负载均衡的使用!
- 【PC工具】Windows下用RaiDrive挂载各种网盘为本地硬盘,挂载Google Drive网盘为本地硬盘使用...
- zynq 文件系统中加载PL fpga.bit笔记
- shell编程基本语法
- CSS学习之多类别选择器
- CrazyWing:Python自动化运维开发实战 九、Python数据类型之列表