多个对象构造和析构

1对象初始化列表

1)对象初始化列表出现原因

1.必须这样做:

如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,没有默认构造函数。这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数,

如果没有初始化列表,那么他将无法完成第一步,就会报错。

2、类成员中若有const修饰,必须在对象初始化的时候,给const int m 赋值

当类成员中含有一个const对象时,或者是一个引用时,他们也必须要通过成员初始化列表进行初始化,

因为这两种对象要在声明后马上初始化,而在构造函数中,做的是对他们的赋值,这样是不被允许的。

2)C++中提供初始化列表对成员变量进行初始化

语法规则

Constructor::Contructor() : m1(v1), m2(v1,v2), m3(v3)

{

// some other assignment operation

}

3)注意概念

初始化:被初始化的对象正在创建

赋值:被赋值的对象已经存在

4)注意:

成员变量的初始化顺序与声明的顺序相关,与在初始化列表中的顺序无关

初始化列表先于构造函数的函数体执行

 #include <iostream>
using namespace std; class A
{
public:
A(int _a)
{
a = _a;
cout << "构造函数" << "a" << a << endl;
} ~A()
{
cout << "析构函数" << "a" << a << endl;
} protected:
private:
int a;
}; //1 构造函数的初始化列表 解决: 在B类中 组合了一个 A类对象 (A类设计了构造函数)
//根据构造函数的调用规则 设计A的构造函数, 必须要用;没有机会初始化A
//新的语法 Constructor::Contructor() : m1(v1), m2(v1,v2), m3(v3)
class B
{
public:
B(int _b1, int _b2) : a1(), a2(), c()
{ } B(int _b1, int _b2, int m, int n) : a1(m), a2(n), c()
{
b1 = _b1;
b2 = _b2;
cout <<"B的构造函数"<<endl;
}
~B()
{
cout<<"B的析构函数" <<endl;
} protected:
private:
int b1;
int b2;
A a2;
A a1;
const int c;
}; //2 先执行 被组合对象的构造函数
//如果组合对象有多个,按照定义顺序, 而不是按照初始化列表的顺序 //析构函数 : 和构造函数的调用顺序相反 //3 被组合对象的构造顺序 与定义顺序有关系 ,与初始化列表的顺序没有关系.
//4 初始化列表 用来 给const 属性赋值
void obj10play()
{ //A a1(10);
//B ojbB(1, 2); //1参数传递
B ojbB2(, ,, ); //2 调用顺序 return ;
} void main100()
{
obj10play();
system("pause");
}

最新文章

  1. UE4 性能优化方法(工具篇)
  2. 16.O(logn)求Fibonacci数列[Fibonacci]
  3. 理解 Python 中的 *args 和 **kwargs
  4. android AIDL RPC 机制
  5. Chapter 1 First Sight——32
  6. seo步骤
  7. 新手向--git版本控制器
  8. SSM项目目录结构
  9. Django web框架-----url path name详解
  10. WebViewJavascriptBridge的使用说明
  11. Springboot中如何在Utils类中使用@Autowired注入bean
  12. python----面向对象(2)
  13. DAX/PowerBI系列 - 参数表(Parameter Table) - 大客户分析(Top N)
  14. 【二十九】php之简易微信二维码支付
  15. postgresql 指令
  16. linux常用命令:Linux 文件属性详解
  17. 四种常见的 POST 提交数据方式,使用postman会用到
  18. android inflate压力泵,将视图发生整合的过程
  19. WPF: 使用CommandManager.InvalidateRequerySuggested手动更新Command状态
  20. ERWin7.2在Windows 8.1中生成数据库遇到的问题!

热门文章

  1. C Traps:优先级常见错误
  2. YII 用gii生成modules模块下的mvc
  3. JS全局变量VAR和THIS--在函数内部,加var是局部变量,不加是全局变量
  4. centos文件基本操作
  5. 【代码笔记】iOS-cell折叠
  6. 报表和aspx结合后在aspx页面实现工具栏的方法
  7. SqlSugarClientHelper
  8. LeakCanary上传 leak trace 到服务器
  9. vmware centos 安装
  10. c# 将秒数转换成时,分,秒的方法