第二十四课 经典问题解析(构造析构顺序)
一、问题解析
-
问题:当程序中存在多个对象的时候,如何确定这些对象的析构顺序? 单个对象创建时构造函数的调用顺序
对于栈对象和全局对象,类似于入栈与出栈的顺序,最后构造的对象最先析构 堆对象的析构发生在使用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 指针用于表示当前对象
|