C++学习基础十——子类构造函数与析构函数的执行
1.子类构造函数的执行:
先执行父类的构造函数,再执行成员对象的构造函数,最后执行自身的构造函数。
当继承多个类时,构造函数的 执行顺序与继承时的顺序 相同,而与子类构造函数调用父类构造函数的顺序无关。
2.子类析构函数的执行:
先执行自身析构函数,再执行成员对象的析构函数,最后执行父类的析构函数 。
当继承多个类时,父类析构函数的执行过程与构造函数的执行过程相反
3.代码如下:
#include <iostream>
#include <string> using namespace std;
//子类构造函数的执行过程:先执行父类的构造函数,再执行成员对象的构造函数,最后执行自身的构造函数
//当继承多个类时,构造函数的 执行顺序与继承时的顺序 相同,而与子类构造函数调用父类构造函数的顺序无关
//子类析构函数的执行过程:先执行自身析构函数,再执行成员对象的析构函数,最后执行父类的析构函数
//当继承多个类时,父类析构函数的执行过程与构造函数的执行过程相反 class Base1
{
public:
Base1(int k)
{
a = k;
cout<<"Base1的构造函数被调用...."<<endl;
}
void test()
{
cout<<a<<endl;
}
~Base1()
{
cout<<"Base1的析构函数被调用...."<<endl;
}
private:
int a;
}; class Base2
{
public :
Base2(int k)
{
b = k;
cout<<"Base2的构造函数被调用...."<<endl;
}
void test()
{
cout<<b<<endl;
}
~Base2()
{
cout<<"Base2的析构函数被调用...."<<endl;
}
private:
int b;
}; class Base3
{
public:
Base3()
{
c = ;
cout<<"Base3的默认构造函数被调用...."<<endl;
}
void test()
{
cout<<c<<endl;
}
~Base3()
{
cout<<"Base3的析构函数被调用...."<<endl;
}
private:
int c;
}; class Demos
{
public:
Demos(int k)
{
m = k;
cout<<"Demos的构造函数被调用...."<<endl;
}
int getM()
{
return m;
}
~Demos()
{
cout<<"Demos的析构函数被调用...."<<endl;
}
private:
int m;
}; class son:public Base1,public Base3,public Base2
{
public:
son(int a,int b,int c,int l);
void test();
~son();
private:
int s;
Demos d;
}; son::son(int a,int b,int c,int l):Base1(a),Base2(b),s(c),d(l)
{
cout<<"son的构造函数被调用...."<<endl;
} void son::test()
{
Base1::test();
Base2::test();
Base3::test();
cout<<s<<endl;
cout<<d.getM()<<endl;
}
son::~son()
{
cout<<"son的析构函数被调用...."<<endl;
} int main()
{
cout<<"======子类构造函数的执行过程 start====="<<endl;
son son(,,,);
cout<<"======子类构造函数的执行过程 end====="<<endl;
son.test(); cout<<"\n======子类析构函数的执行过程 ====="<<endl;
return ;
}
执行结果如下图所示:

C++学习基础十——子类构造函数与析构函数的执行的更多相关文章
- C++学习笔记(6)----基类和派生类的构造函数和析构函数的执行顺序
基类和派生类:构造函数和析构函数的执行顺序 在Visual Studio中,新建控制台工程,构造类如下: #include<iostream> using namespace std; c ...
- C++学习基础十二——纯虚函数与抽象类
一.C++中纯虚函数与抽象类: 1.含有一个或多个纯虚函数的类成为抽象类,注意此处是纯虚函数,而不是虚函数. 2.如果一个子类继承抽象类,则必须实现父类中的纯虚函数,否则该类也为抽象类. 3.如果一个 ...
- C++学习基础六——复制构造函数和赋值操作符
1.什么是复制构造函数 复制构造函数:是构造函数,其只有一个参数,参数类型是所属类的类型,且参数是一个const引用. 作用:将本类的成员变量赋值为引用形参的成员变量. 2.什么是赋值操作符 赋值操作 ...
- c++中的类(构造函数,析构函数的执行顺序)
类对象的初始化顺序 新对象的生成经历初始化阶段(初始化列表显式或者隐式的完成<这部分有点像java里面的初始化块>)——> 构造函数体赋值两个阶段 1,类对象初始化的顺序(对于没有父 ...
- C++学习基础十一——子类对象向父类对象的转化
一.C++中可以实现子类向父类的转换,主要分为三种形式: 1.对象转换:不能实现动态绑定,即不能实现多态. 2.引用转换:动态绑定,实现多态. 3.指针转换:动态绑定,实现多态. 注意:一般不会出现父 ...
- C++学习基础十六-- 函数学习笔记
C++ Primer 第七章-函数学习笔记 一步一个脚印.循序渐进的学习. 一.参数传递 每次调用函数时,都会重新创建函数所有的形参,此时所传递的实参将会初始化对应的形参. 「如果形参是非引用类型,则 ...
- C++学习基础十五--sizeof的常见使用
sizeof的常见用法 1. 基本类型所占的内存大小 类型 32位系统(字节) 64位系统(字节) char 1 1 int 4 4 short 2 2 long 4 8 float 4 4 doub ...
- C++学习基础十四——基础类型vector
一.vector的使用 1. #include <vector> 2. 初始化的四种方法 vector<T> v1; vector<T> v2(v1); vecto ...
- 第十六周oj刷题——Problem E: B 构造函数和析构函数
Description 在建立类对象时系统自己主动该类的构造函数完毕对象的初始化工作, 当类对象生命周期结束时,系统在释放对象空间之前自己主动调用析构函数. 此题要求: 依据主程序(main函数)和程 ...
随机推荐
- hibernate 的 CascadeType 属性
hibernateintegerstringfloatclassmerge @Entity @Table(name="orders")public class Order { // ...
- 《JavaScript模式》第4章 函数
@by Ruth92(转载请注明出处) 第4章:函数 一.JavaScript 中函数的两个重要特征 函数是第一类对象,可以作为带有属性和方法的值以及参数进行传递: 函数提供了局部作用域,而其他大括号 ...
- [读书笔记]java中的类加载器
以下内容大多来自周志明的<深入理解Java虚拟机>. 类加载器是java的一项创新,也是java流行的重要原因之一,它最初是为了满足java applet的需求而开发出来. 什么是appl ...
- poj3160 强连通+记忆化搜索
题意:有一张 n 点 m 边的有向无环图,每个点有各自的权值,可正可负,现在从一个点开始走,一直走到不能走到其他点为止,每经过一个点,可以选择获得或不获得它的权值,每个点可以走多次,但是权值只能获得一 ...
- 准确理解SO_REUSEADDR
默认情况下,套接字不同一个正在使用的本地地址绑定到一起.但在少数情况下,仍有必要以这种方式,来实现对一个地址的重复利用.每个连接都是通过它的本地及远程地址的组合,"独一无二&qu ...
- checkbox 选中、取值处理
[1].[代码] checkbox 选中.取值处理 跳至 [1] ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 ...
- IIS:日志代码分析
如何看IIS日志代码,打开IIS日志后,你会看见里面有很多访问记录.baiduspider,Googlebot等就是蜘蛛了.蜘蛛爬过后都会留下记录的,状态代码列在下面: 100 - 表示已收到请求的一 ...
- [经验交流] 简单安装 centreon 3.2
centreon 是一个自动化监控平台,监控数据存储在 mysql 中,监控配置在UI中操作,方便且功能强大. 1. centreon 监控引擎 centreon 可以与 nagios 结合,使用 n ...
- struts2 Demo
参考资料 :http://www.cnblogs.com/yangy608/archive/2010/11/08/1871962.htmlhttp://www.yiibai.com/struts2/s ...
- WebApi:过滤器的种类
WebApi:筛选器的种类 授权筛选器:这些筛选器用于实现IAuthorizationFilter和做出关于是否执行操作方法(如执行身份验证或验证请求的属性)的安全决策.AuthorizeAttrib ...