C++派生类与基类构造函数调用次序
运行环境:SUSE Linux Enterprise Server 11 SP2 (x86_64)
#include <iostream>
using namespace std;
class Base
{
public:
Base()
{
cout << "Base Constructor" << std::endl;
}
Base(const Base& other)
{
cout << "Base Copy Constructor" << std::endl;
}
virtual ~Base()
{
cout << "Base Destructor" << std::endl;
}
const Base & operator = (const Base& other)
{
cout << "assignment operator" << std::endl;
}
};
class Derived: public Base
{
public:
Derived()
{
cout << "Derived Constructor" << std::endl;
}
Derived(const Derived& other)
{
cout << "Derived Copy Constructor" << std::endl;
}
virtual ~Derived()
{
cout << "Derived Destructor" << std::endl;
}
const Derived & operator = (const Derived& other)
{
cout << "assignment operator" << std::endl;
}
};
==============================================================
A. 测试派生类对象
int main(int argc, char *argv[])
{
Derived d1;
return 1;
}
输出:
Base Constructor
Derived Constructor
Derived Destructor
Base Destructor
结论:
1.先构造父类,才构造子类,没有父亲,哪有儿子啊!
2.即使子类(派生类)没有显式(explicit)的调用(在初始化列表中调用)父类(基类)的构造函数,父类的构造函数也会被调用;
================================================================
B. 测试基类的拷贝构造函数
int main(int argc, char *argv[])
{
Base b1;
cout << "b1 constructed done" << std::endl;
Base b2 = b1;
cout << "b2 constructed done" << std::endl;
Base b3(b2);
cout << "b3 constructed done" << std::endl;
return 1;
}
输出结果:
Base Constructor
b1 constructed done
Base Copy Constructor
b2 constructed done
Base Copy Constructor
b3 constructed done
Base Destructor
Base Destructor
Base Destructor
结论:
1. 代码: "Base b2 = b1;" 和 "Base b3(b2);"
将调用拷贝构造函数,而不是其它的(赋值、构造)函数;
扩展: 函数参数传值调用也会调用拷贝构造函数
添加函数:
void Func(Base b)
{
}
int main(int argc, char *argv[])
{
Base b1;
cout << "b1 constructed done" << std::endl;
Func(b1);
return 1;
}
输出结果:
Base Constructor
b1 constructed done
Base Copy Constructor
Base Destructor
Base Destructor
可见: 函数参数传值调用也会调用拷贝构造函数
==================================================================
C. 测试派生类的拷贝构造函数
int main(int argc, char *argv[])
{
Derived b1;
cout << "b1 constructed done" << std::endl;
Derived b2 = b1;
cout << "b2 constructed done" << std::endl;
Derived b3(b2);
cout << "b3 constructed done" << std::endl;
return 1;
}
输出结果:
Base Constructor
Derived Constructor
b1 constructed done
Base Constructor
Derived Copy Constructor
b2 constructed done
Base Constructor
Derived Copy Constructor
b3 constructed done
Derived Destructor
Base Destructor
Derived Destructor
Base Destructor
Derived Destructor
Base Destructor
结论:
1. 派生类的拷贝构造函数被调用前,会调用子类的构造函数;
相关文章:

Java项目:在线点餐系统(java+Springboot+Maven+mybatis+Vue+mysql+Redis)
源码获取:博客首页 "资源" 里下载! 项目描述: 这是一个基于SpringBootVue框架开发的在线点餐系统。首先,这是一个前后端分离的项目。具有一个在线点餐系统该有的所有功能。 项目功能: 此项目分为两个角色&…

js 打开窗口window.open
js改变原有的地址 window.open(webPath/index?codecode,_self); 转载于:https://www.cnblogs.com/hwaggLee/p/4645680.html

中兴SDH原理介绍及中兴E300网管介绍
姓名苟忠兴培训课程中兴SDH原理介绍及中兴E300网管介绍培训心得1、 SDH概念:SDH(Synchronous Digital Hierarchy,同步数字体系)是一种将复接、线路传输及交换功能融为一体、并由统一网管系统操作的综合信息传送网络。2、 PDH缺点&…

bootstrap 冻结表格,冻结表头
需要的文件下载: bootstrap-table:https://github.com/wenzhixin/bootstrap-table bootstrap-table-fiex-column:https://github.com/wenzhixin/bootstrap-table-fixed-columns 参考来源:https://www.cnblogs.com/Kyaya/p/9004237.html 1.引入文件 2. bo…

Linux多线程与同步
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 典型的UNIX系统都支持一个进程创建多个线程(thread)。在Linux进程基础中提到,Linux以进程为单位组织操作,Linux中的线程也…

Java项目:校园外卖点餐系统(java+SSM+JSP+maven+mysql)
源码获取:博客首页 "资源" 里下载! 一、项目简述 环境配置: Jdk1.8 Tomcat8.5 mysql Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持) 项目技术: JSP Spring SpringMVC MyBatis cs…

基于css3 transform实现散乱的照片排列
分享一款基于css3 transform实现散乱的照片排列。这是一款简单零散的css3相册排列特效下载。效果图如下: 在线预览 源码下载 实现的代码。 html代码: <div class"main"><div class"pic pic1"><img src"1.jpg…

C++利用二级指针做函数形参来进行修改实参的实例分析
在学C/C的时候,我们都会了解到一级指针,int* i NULL; 和二级指针int ** pp NULL; 但是具体的一些应用我们可能很难理解,如果我们要取int*的地址,我们就需要int**,这是因为指针传递本质上还是值传递,本质很难理解&a…

SpringBoot 优雅实现超大文件上传,通用方案
通俗的说,你把要上传的东西上传,服务器会先做MD5校验,如果服务器上有一样的东西,它就直接给你个新地址,其实你下载的都是服务器上的同一个文件,想要不秒传,其实只要让MD5改变,就是对文件本身做一下修改(改名字不行),例如一个文本文件,你多加几个字,MD5就变了,就不会秒传了。分片上传,就是将所要上传的文件,按照一定的大小,将整个文件分隔成多个数据块(我们称之为Part)来进行分别上传,上传完之后再由服务端对所有上传的文件进行汇总整合成原始的文件。

robotframework - 运行报错提示 No keyword with name 'Open Browser' found.
用下面的例子为例: 1、输入以上robot脚本提示: 2、经查阅资料,大部分都使用的是selenium2 版本,无法解该的问题,目前小编使用的是selenium3,不知道selenium是哪个版本的话,用pip show selenium…

Linux从程序到进程
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢! 计算机如何执行进程呢?这可以说是计算机运行的核心问题。即使我们已经编写好程序,但程序是死的文本,只有成为…

struct stat结构体的详解和用法
[cpp] view plaincopy//! 需要包含de头文件 #include <sys/types.h> #include <sys/stat.h> S_ISLNK(st_mode):是否是一个连接.S_ISREG(st_mode):是否是一个常规文件.S_ISDIR(st_mode):是否是一个目录S_ISCHR(st_mode)&a…

反射setaccessible_反射技术
反射机制作用动态的加载类、动态的获取类的信息(属性,方法,构造器)动态构造对象动态调用类和对象的任意方法、构造器动态调用和处理属性获取泛型信息处理注解获取Class对象的方式有哪些?1. Class clazz Class.forName(全限定类名);2. 类名.c…

pthread_cond_wait()函数的详解
http://hi.baidu.com/tjuer/item/253cc6d66b921317d90e4483 了解 pthread_cond_wait() 的作用非常重要 -- 它是 POSIX 线程信号发送系统的核心,也是最难以理解的部分。 首先,让我们考虑以下情况:线程为查看已链接列表而锁定了互斥对象&#x…

CentOS7下python虚拟环境
搭建python虚拟环境 1.我们先创建一个隐藏目录 .virtualenvs,所有的虚拟环境都放在此目录下 :mkdir /root/.virtualenvs 2.安装虚拟环境 确认pip:whereis pip3 pip3 install virtualenv 安装virtualenvwrapper,为避免超时错误&…

WCDMA中的URA和LA/RA
1、关于URA的概念:URA(UTRAN Registration Area)是UTRAN内部区域的划分适用于UE处于RRC连接状态的情形,而且只能在UTRAN端使用(比如由UTRAN发起的寻呼)。一 个URA包含了一个或多个Cell,具体由决…

背景音乐的实现
通过利用Service来实现该功能将要播放的歌曲放入raw文件夹中[html] view plaincopy <strong>新建一个AudioService 类,<span style"font-family: Arial, Helvetica, sans-serif;">AudioService 类</span><span style"font-fami…

打牌软件可以控制吗_使用crm软件真的可以帮助企业省钱吗
使用crm软件真的可以帮助企业省钱吗大多数企业管理者认为:“客户关系系统有什么用?真的可以帮助企业发展吗?自己做一套excel版本不就行了”其实,不以为然,当我们去寻找用户时或者管理用户需要工作人员做一些繁琐的事情会极大的降低员工的工…

MS_SQL_获取字符串最后出现的字符串及位置
一.如:6.7.8.2.3.4.x得到最后一个.后面的字符串: declare str1 varchar(50) set str16.7.8.2.3.4.x select REVERSE(SUBSTRING(REVERSE(str1),1,CHARINDEX(.,REVERSE(str1))-1)) -------- string:x-- --------------------------------------…

redis(3)-redis基本类型
在redis安装目录下存在redis自带的客户端,启动即可使用。如果设置了密码,需要输入auth 123456进行验证。123456为密码。 redis的基本数据类型: 1.字符串类型(String) redis 127.0.0.1:6379> SET mykey "redis" OK redis 1…

虚函数与虚继承寻踪
封装、继承、多态是面向对象语言的三大特性,熟悉C的人对此应该不会有太多异议。C语言提供的struct,顶多算得上对数据的简单封装,而C的引入把struct“升级”为class,使得面向对象的概念更加强大。继承机制解决了对象复用的问题&…

信息记录拉取失败_天猫入驻为什么失败?猫店侠做详细解读
天猫入驻为什么失败?这是很多商家都想要知道的一件事情,猫店侠想说其实这也很正常,只要不是一味盲目的入驻,就还有机会。首先失败商家要看看失败的反馈内容,看看是哪方面不达标,再着重进行补充,…

Linux查看目录挂载点
用命令 df 即可 # df /var/lib/ Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda3 135979984 66905292 62055896 52% /加上-kh更容易看些: # df /var/lib/ -kh Filesystem Size Used Avail Use% Mounted o…

Android:你好,androidX!再见,android.support
190325 补充:莫名问题的解决 181106 补充:修改未迁移成功的三方库 1、AndroidX简介 点击查看Android文档中对androidx的简介 按照官方文档说明 androidx 是对 android.support.xxx 包的整理后产物。由于之前的support包过于混乱,所以…

设计模式:简单工厂、工厂方法、抽象工厂之小结与区别
简单工厂,工厂方法,抽象工厂都属于设计模式中的创建型模式。其主要功能都是帮助我们把对象的实例化部分抽取了出来,优化了系统的架构,并且增强了系统的扩展性。 本文是本人对这三种模式学习后的一个小结以及对他们之间的区别的理解…

云计算和大数据时代网络技术揭秘(八)数据中心存储FCoE
数据中心存储演化——FCoE数据中心三大基础:主机 网络 存储在云计算推动下,存储基础架构在发生演变传统存储结构DAS、SAN在发展中遇到了布线复杂、能耗增多的缺点(原生性),需要对架构做根本的改变。FCoE是业界无可争议…

在plsql里面怎么去掉空行_盐渍樱花怎么做?详细做法告诉您,一年都不会坏,学会再也不用买...
盐渍樱花怎么做?详细做法告诉您,一年都不会坏,赶紧收藏学会它!樱花季说的就是现在,虽然到了飘落的季节,但是还是到处可见的樱花朵朵。俗话说:花无百日红。真的是啊,每年的三四月是最…

Linux基础知识——常用shell命令介绍(三)
一、改变文件权限 chmod:change mode 语法:# chmod [选项-option] 权限 FILE 选项:-R 递归修改权限 --reference 参照文件或目录给予权限 权限定义方式: 1.同时修改三类用户的权限: 8进制数字方式 # chmod 666 /abc /*将/abc的权限改为…

免费版CloudFlare CDN基本设置参考
CDN有很多,网上都有介绍,用户比较多的CloudFlare CDN大家都知道,配置起来也比较简单,合理的配置,才能提升网站的速度和网站安全。不同的网站需求配置不一样,以下是我的配置情况,仅供参考。 我网…

从Java类库看设计模式
//From http://www.uml.org.cn/j2ee/201010214.asp 很多时候,对于一个设计来说(软件上的,建筑上的,或者它他工业上的),经验是至关重要的。好的经验给我们以指导,并节约我们的时间;坏的经验则给我们以借鉴,可…