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函数)和程 ...
随机推荐
- java的eclipse操作和常用类Object的使用
1.eclipse的快捷键: (1)alt + / 内容辅助. 如:main+alt + / 会出现完整的main方法. syso+alt+ / 会输出. 如编写某个方法时,只需写入方法名 + a ...
- ViewHolder简洁写法
ViewHolder holder = null; if(convertView == null){ convertView = mInflater.i ...
- Eclipse安装easyShell插件
easyshell是一个用于快速打开文件目录.复制文件路径.cmd打开等等的eclipse插件工具. Eclipse下安装easyshell: 1.打开Eclipse商店 2.输入easyShell点 ...
- 加载json文件没显示图片
IOS 9新特性要求App内访问的网络必须使用HTTPS协议. 但是现在公司的项目使用的是HTTP协议,使用私有加密方式保证数据安全.现在也不能马上改成HTTPS协议传输. 以下解决办法: 在info ...
- JSP知识点汇总
有几种方法可以实现服务器内部跳转? 使用request对象提供的方法:request.getRequestDispatcher(String URI).forward(ServletRequest r ...
- std::ostringstream输出流详解
一.简单介绍 ostringstream是C++的一个字符集操作模板类,定义在sstream.h头文件中.ostringstream类通常用于执行C风格的串流的输出操作,格式化字符串,避免申请大量的缓 ...
- OJ上 G++ 与 C++ 的区别
1.输出double类型时,如果采用G++提交,scanf采用%lf,prinf采用%f,否则会报错 2.使用GCC/G++的提醒: 对于64位整数, long long int 和 __int64 ...
- Windows下Faster-RCNN的使用
上一篇随笔中包含了关于faster rcnn的介绍. 安装与使用 1.下载Faster R-CNN源码(https://github.com/ShaoqingRen/faster_rcnn)2.安装 ...
- linux项目-之系统安装部署-cobbler
http://cobbler.github.io/manuals/2.6.0/1/1_-_Release_Notes.html http://www.osyunwei.com/archives/760 ...
- 初识WebSocket协议
1.什么是WebSocket协议 RFC6455文档的表述如下: The WebSocket Protocol enables two-way communication between a clie ...