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. Redis持久化-数据丢失及解决(转载)

    本文转载自        Redis持久化-数据丢失及解决  感谢原作者 Redis的数据回写机制 Redis的数据回写机制分同步和异步两种, 同步回写即SAVE命令,主进程直接向磁盘回写数据.在数据 ...

  2. 网页版电子表格控件tmlxSpreadsheet免费下载地址

    tmlxSpreadsheet 是一个由JavaScript 和 PHP 写成的电子表格控件(包含WP插件, Joomla插件等等).. 程序员可以容易的添加一个类似Excel功能的,可编辑的表格功能 ...

  3. MYSQL数据库操作语句

    1.创建数据库 CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification [, create_specifica ...

  4. 上载android应用的apk文件变成了zip-网下转载的解决方案

    下载android应用的apk文件变成了zip--网上转载的解决方案 下载android应用的apk文件变成了zip--网上转载的解决方案 解决方案一. 最近把开发的android应用放在公司网站上, ...

  5. redis windows

    下载 redis windows版本 redis-server  redis.windows.conf  //cmd 命令 启动成功 E:\redis\Redis-x64-3.0.500>red ...

  6. JavaScript 图片的上传前预览(兼容所有浏览器)

    功能描述 通过 JavaScript 实现图片的本地预览(无需上传至服务器),兼容所有浏览器(IE6&IE6+.Chrome.Firefox). 实现要点   ● 对于 Chrome.Fire ...

  7. hdu 4348 To the moon

    题意:n个数 m次操作 操作分别为 C l r d: 把区间[l, r] 加 d Q l r : 查询区间[l, r]的和 H l r t: 查询时间t的时候[l, r]的和 B t: 回到时间t 思 ...

  8. 集群中配置多台计算机之间ssh无密码登录的一种简便方法

    当我们在配置多台计算,使之可以相互使用无密码登录-ssh,之前都是一台一台的配置,现在一台A上添加B,然后在另一台B上再次添加A,这样使得 authorized_keys中的内容相同,但时并不是完全相 ...

  9. web app变革之rem

    rem这是个低调的css单位,近一两年开始崭露头角,有许多同学对rem的评价不一,有的在尝试使用,有的在使用过程中遇到坑就弃用了.但是我对rem综合评价是用来做web app它绝对是最合适的人选之一. ...

  10. ssl_error_rx_record_too_long

    Linux下安装SSL 当使用https访问时出现: SSL 接收到一个超出最大准许长度的记录. (错误码: ssl_error_rx_record_too_long) 网上说修改虚拟机 vi /et ...