c++随笔——17.10.29

来源:互联网 发布:筒灯射灯品牌 知乎 编辑:程序博客网 时间:2024/05/23 15:12

类我已经断断续续地看了三遍了,查漏补缺查漏补缺,剩下的只能通过实战进行深入的学习了。

初始化成员列表

Member Initialization List
在类构造函数内的类成员变量进行初始化赋值的时候,可以在函数名后面加上冒号:,然后给需要赋值的变量用括号表示需要赋值,还是以例子说明比较好。
class lei....        //声明了一个类

lei::lei(const lei &d): lei_value(d.lei_value),lei_key(d.lei_key)        //构造函数的传参是该类的对象
{}        //函数体内就是空的了,如果你除了赋值外没有其他事情要做的话

一般也使用在函数中声明定义了一个类对象变量进行操作。

tip:在类中变量定义为私有时,初始化需要使用初始化成员列表进行初始化赋值操作。

tip2:对类对象进行初始化逐一赋值的时候,需要注意,它会一一对应地赋值到相应的变量,例如:
class_name a = b;        //b是之前就已经定义过的class_name的对象,现对它初始化,使其a的值                   
                                   //与b的值都相同
那么,你可能会说,那不是很好吗,如果正常情况下,那是挺不错的,但是,如果,在此类中,有个变量是指针,在构造函数中初始化的时候是给此指针在heap中分配内存空间,这也没问题,那么我们进行对象间的赋值时,一一对应,那么我们的指针也会指向b指针所分配的内存空间,正常情况下也没问题。如果,我们在使用的时候,由于作用域的问题,导致a的生命周期提前结束,调用析构函数,那么那片空间也会被delete掉,即b中指针指向的空间内存被delete了,这是很危险的一件事情。

那么,我们应该怎么做呢?使用拷贝构造函数 copy constructor