第二十四课 经典问题解析(构造析构顺序)
一、问题解析
-
问题:当程序中存在多个对象的时候,如何确定这些对象的析构顺序?
单个对象创建时构造函数的调用顺序
-
调用父类的构造过程
-
调用成员变量的构造函数(调用顺序与声明顺序相同)
一个类中包含其他类,调用顺序按照声明顺序来
-
调用类自身的构造函数
析构函数与对应的构造函数调用顺序相反
-
注意:以上三个并非独立的,而是按照这样的顺序调用的
对于栈对象和全局对象,类似于入栈与出栈的顺序,最后构造的对象最先析构
堆对象的析构发生在使用delete的时候,与delete的使用顺序相关
-
-
问题:const 关键字能否修饰类的对象?如果可以,有什么1特性?
const 关键字能够修饰对象
const 修饰的对象为只读对象
只读对象的成员变量不允许被改变
制度对象是编译阶段的概念,运行时无效
C++ 中的const成员函数
-
const对象只能调用 const 的成员函数
-
const 成员函数中只能调用 const 成员函数
-
const 成员函数中不能直接改写成员变量的值
-
const 成员函数定义:
type calssname::function(type p) const
注意:
const是在后面
类中的函数声明与史记函数定义中都必须带 const 关键字
-
-
问题:成员函数和成员变量都隶属于具体对象吗?
从面向对象角度
- 对象由属性(成员变量)和方法(成员函数)构成
从程序运行角度
- 对象由数据和函数构成,数据可以位于堆、栈、和全局数据区,函数只能位于代码段
所以是所有的对象共享一套成员函数,因为成员函数不能被删除
结论
- 每一个对象拥有自己的独立属性(成员变量)
- 所有的对象共享类的方法(成员函数)
- 方法能够直接访问对象的属性
- 方法中的隐藏参数 this 用于指代当前对象
成员函数只有一套,成员函数可以访问任何所属类里面的成员变量
二、小结
- 对象的析构顺序和构造顺序相反
- const 关键字能够修饰对象,得到只读对象
- 只读对象只能调用 const 成员函数
- 所有的对象共享类的成员函数
- 隐藏的 this 指针用于表示当前对象