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++学习基础十——子类构造函数与析构函数的执行的更多相关文章

  1. C++学习笔记(6)----基类和派生类的构造函数和析构函数的执行顺序

    基类和派生类:构造函数和析构函数的执行顺序 在Visual Studio中,新建控制台工程,构造类如下: #include<iostream> using namespace std; c ...

  2. C++学习基础十二——纯虚函数与抽象类

    一.C++中纯虚函数与抽象类: 1.含有一个或多个纯虚函数的类成为抽象类,注意此处是纯虚函数,而不是虚函数. 2.如果一个子类继承抽象类,则必须实现父类中的纯虚函数,否则该类也为抽象类. 3.如果一个 ...

  3. C++学习基础六——复制构造函数和赋值操作符

    1.什么是复制构造函数 复制构造函数:是构造函数,其只有一个参数,参数类型是所属类的类型,且参数是一个const引用. 作用:将本类的成员变量赋值为引用形参的成员变量. 2.什么是赋值操作符 赋值操作 ...

  4. c++中的类(构造函数,析构函数的执行顺序)

    类对象的初始化顺序 新对象的生成经历初始化阶段(初始化列表显式或者隐式的完成<这部分有点像java里面的初始化块>)——> 构造函数体赋值两个阶段 1,类对象初始化的顺序(对于没有父 ...

  5. C++学习基础十一——子类对象向父类对象的转化

    一.C++中可以实现子类向父类的转换,主要分为三种形式: 1.对象转换:不能实现动态绑定,即不能实现多态. 2.引用转换:动态绑定,实现多态. 3.指针转换:动态绑定,实现多态. 注意:一般不会出现父 ...

  6. C++学习基础十六-- 函数学习笔记

    C++ Primer 第七章-函数学习笔记 一步一个脚印.循序渐进的学习. 一.参数传递 每次调用函数时,都会重新创建函数所有的形参,此时所传递的实参将会初始化对应的形参. 「如果形参是非引用类型,则 ...

  7. C++学习基础十五--sizeof的常见使用

    sizeof的常见用法 1. 基本类型所占的内存大小 类型 32位系统(字节) 64位系统(字节) char 1 1 int 4 4 short 2 2 long 4 8 float 4 4 doub ...

  8. C++学习基础十四——基础类型vector

    一.vector的使用 1. #include <vector> 2. 初始化的四种方法 vector<T> v1; vector<T> v2(v1); vecto ...

  9. 第十六周oj刷题——Problem E: B 构造函数和析构函数

    Description 在建立类对象时系统自己主动该类的构造函数完毕对象的初始化工作, 当类对象生命周期结束时,系统在释放对象空间之前自己主动调用析构函数. 此题要求: 依据主程序(main函数)和程 ...

随机推荐

  1. android:LayoutInflater

    LayoutInflater:一般用于查找res/layout下的布局文件,findViewById()一般是用于查找布局下的各种控件 一般:我们使用LayoutInflater.from(conte ...

  2. ie 11 cookie 的值为空

    昨天碰到ie 11上运行的程序时  登录老是登录不上去 一直是登录界面 最后检查半天发现时因为 权限验证登录时 获取cookie里的用户信息时 一直为空 便在网上查询资料  发现是因为ie11 里貌似 ...

  3. 关于ASP.NET页面打印技术的总结【转】

    B/S结构导致了Web应用程序中打印的特殊性. • 程序运行在浏览器中,打印机在本地,而文件确可能在服务器上,导致了打印控制不是很灵活. • 格式如何控制和定制等,是我们开发中可能会面对的问题. 打印 ...

  4. RedHat不能使用ifconfig命令

    安装RedHat后,使用ifconfig命令,结果报错command not found,解决方法如下: 1.cat ~/.bash_profile     查看path 2.vi /etc/prof ...

  5. 如何垂直居中一个<img>?

    <!doctype html><html> <head> <meta charset="UTF-8"> <meta name= ...

  6. mongodb,redis,hbase 三者都是nosql数据库,他们的最大区别和不同定位是什么?

      不严谨地讲,Redis定位在"快",HBase定位于"大",mongodb定位在"灵活". NoSQL的优点正好就是SQL的软肋,而其弱 ...

  7. 【 D3.js 入门系列 --- 4 】 如何使用scale(比例)

    在上一节中使用了一个很重要的概念 — scale (这个不知道翻译成什么,暂且叫它比例).本节将重点介绍它的相关使用方法. 在介绍 scale 之前,先介绍两个经常和 scale 一起出现的函数,在上 ...

  8. 关于debug时的一些操作

    当进入一个for循环时,想要看i==49或者其它的行,可以进行如下操作: 在for循环中打断点,点击鼠标右键,选择如下: 在弹出的页面中选择Breakpoint Properties,输入i==49, ...

  9. UVA1583 最小生成元

    题很简单,主要是懂题意. 思想是枚举. #include<cstdio> #include<cstring> #define Max 100001 int ans[Max]; ...

  10. Fragment +ViewPager

    public class MainActivity extends FragmentActivity { private ViewPager vp; @Override    protected vo ...