默认构造与特殊的成员变量之间的关系
来源:互联网 发布:天猫化妆品销售数据 编辑:程序博客网 时间:2024/06/10 20:06
这次,我们先从一个简单的类开始说起
#pragma onceclass CTestA{public:CTestA(void);~CTestA(void);};
class CTestB{public:CTestA t;};先实例化类CTestB的一个对象
CTestB tb;在此,会调用编译器为CTestB,生成的一个默认构造也就是一个空的构造函数(CTestB(void){} ),
那么CTestA t,成员变量是如何被初始化的呢?
在编译器生成的默认构造函数中会隐式地为类类型和它的基类调用有关的默认构造函数,
在CTestB中成员 t 是类类型,所以在实例化CTestB对象时,会调用类CTestA的构造函数
好吧,咱们来测试一下:
#pragma onceclass CTestA{public:CTestA(int);//防止编译器生成默认构造函数~CTestA(void);class CTestB{public:CTestA t;};
编译一下,出错,结果
error C2512: “CTestB”: 没有合适的默认构造函数可用修改一下,成功编译
#pragma onceclass CTestA{public:CTestA(){};~CTestA(void);class CTestB{public:CTestA t;};
我们在引申一下
class CTestA{public:~CTestA(void){};public:const int i;const int ri;};CTestA a;
上面 的例子能正常编译通过吗?
编译器添加一个默认构造函数形式如下:
CTestA( void ) { } ;
两个成员
const int i;const int& ri;const和引用必须进行初始化,包含const和引用成员的类不能进行默认构造,除非显示地提供默认构造。
CTestA():i(0),ri(i){};添加一个带有成员初始列表的构造函数,即可。
- 默认构造与特殊的成员变量之间的关系
- C++类的特殊成员-默认/拷贝/移动构造函数
- 成员变量、实例变量、属性之间的关系
- 成员变量、实例变量、属性之间的关系
- 成员变量、实例变量、属性之间的关系
- 父类成员变量与子类成员变量的关系
- 特殊成员变量的初始化
- Java中成员变量和属性之间的关系
- Java中成员变量和属性之间的关系
- Java中成员变量和属性之间的关系
- java基础(八)Math/代码块/继承成员方法指南的关系/继承中成员变量之间的关系/方法的重写/继承中构造方法之间的关系/this和super的区别
- C++ 成员函数与成员变量的关系
- 指针与变量之间的关系
- 类与对象的关系 局部变量 成员变量
- JAVA成员变量与局部变量的关系
- C++构造函数初始化类的特殊成员变量——类
- C++ 成员变量的初始化与构造函数
- 【C/C++学院】0819-/类的成员函数与const-mutable /构造与析构/拷贝构造deletedefault以及深浅拷贝/静态成员函数成员变量类在内存的存储默认参数/友元类以及友元函数
- 它们是“社交场所”,不是“社交网络”
- 黑马程序员_泛型学习
- IAP超级详解,偷懒了,不用自己去翻译了
- linux修改文件夹权限
- Android Screen Monitor
- 默认构造与特殊的成员变量之间的关系
- WORD 2010里无法使用输入法解决办法
- 三个简单排序算法的java实现
- Android(Java):ndk开发
- 原型模式
- coding - 递减数组左移后寻找某一个数
- alter table
- poj 1716
- URL 编码:CFURLCreateStringByAddingPercentEscapes