<30, 读书笔记——林锐-高质量C编程指南:卷9:类内函数>
本篇主要涉及类的构造函数,析构函数和赋值函数。每个类只能有一个析构函数和赋值函数,但可以有多个构造函数。
类A的默认配置如下:
1,缺省的无参构造函数:A(void);
2,缺省的析构函数:~A(void);
3, 缺省的拷贝构造函数:A(const A &a);
4,缺省的赋值函数:A & operator = (const A &a);
然而我们不适用默认的这些函数的原因是:
1,我们不能白白的浪费了构造和析构时的好时机;
2,缺省的拷贝构造函数和赋值函数均采用的是“位拷贝”,而非值拷贝,倘若类中有指针,则这两个函数必定出错。
———————————————————————————————
1,一般而言,对于一个较为高级的程序员,其出错的地方自然不是语法错误,而是隐藏较深的数据未能初始化或及时清除。
故C++衍生出了构造析构机制,这里的析构函数和构造函数自然与类同名,此外,这两个函数并无返回值。
2,构造函数的初始化表达式:
初始化表,位于函数参数表之后,函数执行体之前。
构造函数的使用规则有:
2.1 若类存在继承关系,则派生类一定要在其初始化表里调用基类的构造函数。
2.2 类的const常量只能在初始化表里进行,而不能再函数体里以赋值的形式来初始化
2.3 对于类外成员,建议采用初始化标的方式来进行初始化。而类内成员,则两者均可以,故一般采用在类内初始化的方法。
3,构造和析构的次序
构造是从类的最根层开始(由基类到派生类),每层均先调用基类的构造函数,再调用对象的构造函数。——而析构则严格按照此过程的逆过程来进行。
此外,类成员对象的构造顺序仅受其在类中声明的位置有关,而与初始化表无关,
4,类String的构造函数和析构函数实例;
5,类String的拷贝构造函数和赋值函数的实例;
6,偷懒的处理拷贝构造函数和赋值函数的方法;
若我们不想编写这两个函数,并且不想其被使用,则,直接在类定义时将其声明为私有函数。
7,如何在派生类中实现基类的基本函数;
7.1 对于构造函数,应在派生类的构造函数的初始化表中调用基类的构造函数
7.2 对于析构函数,则应该在派生类和基类的析构函数前均加上virtual关键字
7.3 最后,最关键的一点是,在派生类中对数据成员赋值时,不要忘了对基类的数据成员赋值
-----------------------------------------------------------
此日志仅为个人笔记,若需电子版,请留言。