博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++构造函数调用顺序
阅读量:7220 次
发布时间:2019-06-29

本文共 1217 字,大约阅读时间需要 4 分钟。

1、创建派生类的对象,基类的构造函数函数优先被调用(也优先于派生类里的成员类);

2、如果类里面有成员类,成员类的构造函数优先被调用;

3、基类构造函数如果有多个基类则构造函数的调用顺序是某类在类派生表中出现的

顺序而不是它们在成员初始化表中的顺序;

4、成员类对象构造函数如果有多个成员类对象则构造函数的调用顺序是对象在类中
被声明的顺序而不是它们出现在成员初始化表中的顺序;

5、派生类构造函数
作为一般规则派生类构造函数应该不能直接向一个基类数据成员赋值而是把值传递
给适当的基类构造函数否则两个类的实现变成紧耦合的(tightly coupled)将更加难于
正确地修改或扩展基类的实现。(基类设计者的责任是提供一组适当的基类构造函数)

 

 

1.虚基类的构造函数;虚基类构造函数如果有多个,虚基类则构造函数的调用顺序是某类在类派生表中出现的顺序而不是它们在成员初始化表中的顺序; 

2、创建派生类的对象,基类的构造函数函数优先被调用(也优先于派生类里的成员类);基类构造函数如果有多个,基类则构造函数的调用顺序是某类在类派生表中出现的顺序而不是它们在成员初始化表中的顺序; 
3、如果类里面有成员类,成员类的构造函数优先被调用;成员类对象构造函数如果有多个成员类对象则构造函数的调用顺序是对象在类中被声明的顺序而不是它们出现在成员初始化表中的顺序; 
4、派生类构造函数 
作为一般规则派生类构造函数应该不能直接向一个基类数据成员赋值而是把值传递 给适当的基类构造函数否则两个类的实现变成紧耦合的(tightly coupled)将更加难于正确地修改或扩展基类的实现。(基类设计者的责任是提供一组适当的基类构造函数)。

 

析构函数与构造函数顺序相反,例如

class A

{
public:
   A() {TRACE(" construct A\n");}
   ~A() {TRACE(" destruct A\n");}
};
class B
{
public:
   B() {TRACE(" construct B\n");}
   ~B() {TRACE(" destruct B\n");}
};
class A1 :A
{
public:
   A1() {TRACE(" construct A1\n");}
   ~A1() {TRACE(" destruct A1\n");}
   B b;
};

执行

   A1* a1  = new A1;
   delete a1;

----------------------

result :

 construct A

 construct B
 construct A1
 destruct A1
 destruct B
 destruct A

 

本文转自莫水千流博客园博客,原文链接:http://www.cnblogs.com/zhoug2020/archive/2012/05/21/2511303.html,如需转载请自行联系原作者

你可能感兴趣的文章
PostgreSQL新手入门
查看>>
经典的python代码
查看>>
vmware10 虚拟机克隆 centos7 完整步骤
查看>>
linux命令行安装VmwareTools(CentOS)
查看>>
Linux常用命令收集整理
查看>>
Sublime Text 2 使用心得
查看>>
我的友情链接
查看>>
Property文件读取的Util类
查看>>
WEBService
查看>>
samba服务器的搭建
查看>>
IO端口和IO内存
查看>>
zookeeper安装
查看>>
第五周作业
查看>>
linux ssh使用深度解析(key登录详解)
查看>>
查询数据库信息
查看>>
mysql主从复制
查看>>
初探Java Builder模式--组装复杂的实力
查看>>
Netty笔记二(发送对象--服务端客户端附可运行源码)
查看>>
ros 设置hotspot认证网段
查看>>
MySQL 超级入门教程
查看>>