构造函数
初始化:两种形式,“:”或者在函数体里初始化。
- 看第二种方法:函数体里初始化
class 张三
{
public:
A(int& 小名)
{
饭量 = 1;
智商 = 2;
小名 = 250;
}
protected:
int 饭量;
const int 智商;
int& 小名;
};
/*
你需要知道的知识:
- int&为引用变量,需要在定义的时候初始化.
- const为恒量限定符,需要在定义的时候初始化,且const创建之后不允许再次赋值
本代码由于上述原因而编译错误,由此,引入冒号初始化方式
*/
知识点:
- 函数体:构造函数为变量分配内存 -> 读到“{ }”里初始化语句 -> 为变量填充初始值
- 冒号:构造函数为变量分配内存 -> 同时为其填充初始值 -> 然后开始执行“{}”里的内容。
- 看第一种方法:冒号初始化
class 张三
{
public:
A(int& 小名):智商(2),小名(250)
{
饭量 = 1;
}
protected:
int 饭量;
const int 智商;
int& 小名;
};
编译成功
你一定发现了这行代码变了:A(int& 小名):智商(2),小名(250)
在进入构造方法同时,开辟内存空间给“智商”“小名”,同时初始化好变量,即可正常编译。
- 借用博主zj510实验成果图片:
链接:https://blog.csdn.net/zj510/article/details/8135556
看得出,_a对应本文"饭量";_b对应智商;_c对应小名,清晰看到,进入A构造函数后,“智商”变为2,"小名"变成250,且"饭量"已经被定义,但仍未未初始化,这一切都说明冒号能够在进入函数括号之前就发挥作用。。
总结:C++声明一个类A,类A的构造函数在创建好对象A a;之后构造其数据成员整个过程要求:1. 给出此数据成员分配的内存地址空间,2. 按其声明的顺序开始初始化成员3. 初始化数据成员
- 希望我总结的思路能帮你理解冒号在构造函数中的作用。感谢天道酬勤,也愿你我财富自由。