构造函数
来源:互联网 发布:流水账软件 编辑:程序博客网 时间:2024/05/17 23:13
一构造函数概述:
(一)构造函数:
*调用一个base class的constructor,而它拥有一组参数。(constructor包括:构造函数和复制构造函数)
*调用一个member class的constructor,而它拥有一组参数。
(一)两个误解:
(1)任何class如果没有定义default constructor就会合成一个。错错错!!!(Default Copy Constructor一样)
(2)编译器合成的default constructor会明确设定"class内每一个data member的默认值"。错错错!!!(Default Copy Constructor会复制其他的,如整数、指针、数组等等)。
(二)何时编译器会合成default constructor的两种说法(意思一样):
(1)ARM:当编译器需要的时候,并且合成的default constructor只满足编译器的需要。
*程序需要:由程序员完成。
*编译器需要:由编译器完成,并只满足编译器的需要,不理会程序需要。
(2)C++ Standard:当default constructor是nontrivial时,编译器会合成default constructor,合成的default constructor只满足编译器需要。
*编译器合成的default constructor中,只有base class subobjects和member class object会被初始化,所有其他non-static data member如:整数、整数指针、整数数组等都不会被初始化。
*trivial default constructor,实际上不会被合成出来。
(3)满足"编译器需要"的方法:
*合成default constructor.
*如果程序员自己定义了default constructor,则编译器会扩充已存在的constructor,在其中安插一些代码(满足编译器需要的代码),使得在user code被执行之前,先调用必要的代码满足编译器需要。
(三)是default nontrivial constructor的四种情况(即编译器会合成default constructor):
(1)"带有Default constructor"的Member Class Object。
(2)派生自"带有Default Constructor"的base class。
(3)"带有或继承一个Virtual Function"的class:编译器为object的vptr设定初值,放置适当的virtual table的地址。
(4)class派生自一个继承链,其中含有一个或多个virtual base classes:编译器安插"允许每一个virtual base class的执行期存取操作"的码。
- 构造函数
- 构造函数
- 构造函数
- 构造函数
- 构造函数
- 构造函数
- 构造函数
- 构造函数
- 构造函数
- 构造函数
- 构造函数
- 构造函数
- 构造函数
- 构造函数
- 构造函数
- 构造函数
- 构造函数
- 构造函数
- JAVA资源操作的注意点
- 2013寒假练习 1010:Maximum Sum
- 函数参数传递
- Java中的Overload Overwrite Override
- mysql 存储过程编写(2)
- 构造函数
- 反汇编的call和retn
- Google Code Jam 2012 Qualification Round. Problem D. Hall of Mirrors
- php XML文件解释类
- 在linux系统(suse和redhat)下,打开coredump的设置方法
- 开源网店程序magento目录结构完整版
- android 如何使用命令和代码设置heapsize
- static关键字
- 12306网站、抢票插件以及偶写的自动订票小程序