【C++】继承时构造函数和析构函数
1. 顺序
先调用基类的构造函数,再调用派生类构造函数。析构顺序相反。
2. 构造函数
派生类 不用初始化列表调用基类构造函数->调用基类的默认构造函数
派生类 使用初始化列表调用基类带参构造函数->调用基类相关的带参构造函数
若派生类有多个构造函数版本,其中任意一个基类的构造函数不匹配,都会出错。
3. 复制构造函数
派生类 未定义复制构造函数 ->调用基类的复制构造函数(如果有)或默认复制构造函数,和派生类的默认复制构造函数
派生类 定义了复制构造函数 未使用初始化列表调用基类复制构造函数 -> 调用基类默认构造函数
派生类 定义了复制构造函数 使用初始化列表调用基类复制构造函数 -> 调用基类复制构造函数(如果有)或默认复制构造函数
例子:
#include<iostream> using namespace std;class A { public:A(){cout << "A 默认构造函数" << endl;}A(int i){cout << "A A(int i)构造函数" << endl;}~A(){cout << "A 析构函数" << endl;}A(const A & obj){cout << "A 复制构造函数" << endl;} };class B : public A { public:B(){cout << "B 默认构造函数" << endl;}B(int j):A(j){cout << "B B(int j):A(j)" << endl;}~B(){cout << "B 析构函数" << endl;}B(const B & obj) //调用A的默认构造函数 {cout << "B 复制构造函数" << endl;}//B(const B & obj):A() //调用A的默认构造函数//{// cout << "B 复制构造函数" << endl;//}//B(const B & obj):A(obj) //调用A的复制构造函数//{// cout << "B 复制构造函数" << endl;//} };int main() {{cout << "----------------------" << endl;B b;cout << "----------------------" << endl;B b1(3);cout << "----------------------" << endl;B b2(b);cout << "----------------------" << endl;}return 0; }
转载于:https://www.cnblogs.com/dplearning/p/4785346.html
【C++】继承时构造函数和析构函数相关推荐
- C++类继承时构造函数与析构函数的执行顺序
C++类继承时构造函数与析构函数的执行顺序 在C++类中,类A继承类B时,如果创建一个A的对象时,会首先调用基类的构造函数,再调用派生类的构造函数,而析构函数的执行相反,但是当基类和派生类分别有一个成 ...
- 多继承的构造函数和析构函数
//程序2:多继承的构造函数 与 析构函数 #include<iostream> using namespace std;class A { public: A() { cout<& ...
- Java继承时构造函数的关系
Java继承时构造函数的关系,先来一道笔试题给大家看看: 在继承中,关于构造方法的说明,下列说法错误的是() A.子类无条件的继承父类的无参构造方法, B.子类可以引用父类中的有参构造方法,使用sup ...
- c++远征之继承篇——继承的概念、继承时构造函数/析构函数的先后顺序
1.继承的概念 2.继承中,构造函数和析构函数的先后顺序
- C++虚继承中构造函数和析构函数顺序问题以及原理
多重继承的问题:多个类B,C,-继承同一个类A导致如果X继承了B,C,-那么在X中将还有多个A中成员的拷贝,如果想要访问A中的成员如果不加名字空间将会导致二义性,这种拷贝大多是没有实际意义的,为了避免 ...
- 公有继承中 构造函数和析构函数的调用(包含内嵌子对象)
先祖先后客人再自己. #include<iostream>#include<cstdio>using namespace std;class B0 { public:B0(){ ...
- C++虚继承时的构造函数
在虚继承中,虚基类是由最终的派生类初始化的,换句话说,最终派生类的构造函数必须要调用虚基类的构造函数.对最终的派生类来说,虚基类是间接基类,而不是直接基类.这跟普通继承不同,在普通继承中,派生类构造函 ...
- C++关于虚基类、构造函数、析构函数、成员对象的两个程序浅析
预备博客: C++虚继承中构造函数和析构函数顺序问题以及原理 C++派生类含有成员对象构造函数析构函数顺序 C++虚基类成员可见性 程序一如下: #include<iostream> us ...
- C++继承中构造函数、析构函数调用顺序及虚析构函数
首先说说构造函数,大家都知道构造函数里就可以调用成员变量,而继承中子类是把基类的成员变成自己的成员,那么也就是说子类在构造函数里就可以调用基类的成员了,这就说明创建子类的时候必须先调用基类的构造函数, ...
最新文章
- 2016 ICPC World Finals -Ceiling Function
- c#泛型作为返回类型的写法
- [深度学习TF2] 梯度带(GradientTape)
- d3 svg path添加文本_数据可视化——D3展现数据最炫丽的一面
- 超级搜索术,提升解决问题的能力
- VS2003添加.BMP资源
- 计算机专业暑期三下乡活动方案,暑期三下乡活动方案
- linux更新war包操作步骤,关于Linux系统下基于Tomcat部署和升级war包的详细过程
- 华为数据存储用户精英论坛,信心与合作的故事
- Android程序员简历
- 只读(Readonly)与禁用(Disable)的区别与使用
- 深度学习花朵识别系统的设计与实现
- cad计算机平方,AutoCAD的平方符号怎么打出来?
- 淫荡气息溢满魔都……
- WordPress登录注册系统的优化
- Gem5与NVMain混合编译(一)
- 数组是“二等公民”的话题
- php 怎么上传图片,php怎么把图片上传到图片服务器
- 主编编辑器如何添加超链接?
- 06Cadengce Allegro向导制作BGA封装
热门文章
- docker 启动容器的时候没-p 后面怎么加-p_基于Docker搭建基础自动化部署
- dml操作mysql_数据库DML操作(DCL了解)
- python不同颜色的代码_python日志通过不同的等级打印不同的颜色(示例代码)
- jsf入门实例_JSF selectManyListBox示例教程
- mvc crud_Spring MVC Hibernate MySQL集成CRUD示例教程
- Python reversed()函数
- .net 编译、反编译、查壳、脱壳、反混淆工具
- 查看C++ C#的dll或exe文件是32位还是64位
- 开课吧:Webpack的构建流程是什么?
- Django 缓存、序列化、信号