8.11 小结

    本章讲述了C++语言中面向对象编程的基本概念和方法。

    C++通过class关键字可以定义类,类的成员包括数据成员和函数成员两种。关于类的使用,大体分为类的定义、类的实现和类对象的创建3个步骤,其中,类的定义指明了类的结构,相当于“蓝图”,而类的实现相当于“技术图纸”,根据定义和实现便可以声明一个类的对象。

    类中有几个特殊的成员函数,构造函数、复制构造函数和析构函数。构造函数和复制构造函数用于为类对象开辟所需内存空间,而析构函数则是在撤销对象时,释放其内存空间,但需要注意的是,用户通过new申请的动态内存并不会在对象撤销时被自动释放,所以,应合理搭配new和delete,及时释放无用的动态内存。构造函数不能由用户调用,但析构函数可以显式调用。复制构造函数的形参是本类对象的引用,它是用一个对象来初始化另一个对象。如果编程者没有显式定义构造函数(包括复制构造函数),C++编译器就会隐式定义默认的构造函数。

    一些特殊数据成员和函数成员的用法要特别注意,在C++中,static数据成员和static函数成员用以实现类的所有对象对一个或多个类成员的共享,一个类的静态数据成员仅创建和初始化一次,在程序开始执行的时候创建,被该类的所有对象共享;而非静态的数据成员则随着对象的创建而多次创建和初始化。与静态数据成员类似,静态成员函数也是属于类的。静态成员函数能直接访问静态的数据成员,如果需要访问非静态数据成员和非静态函数成员,需要传递对象的引用作参数。

    C++引入了const函数的概念。const函数不改变对象的数据成员,也不能调用非const函数。常量对象只能调用const函数;但构造函数和析构函数对这个规则例外,它们从不定义为常量成员,但可被常量对象调用(被自动调用)。

    与普通变量一样,对象也可以组织成对象数组和链表。C++中还定义了一个this指针,它仅能在类的成员函数中访问,恒指向当前对象。

    不仅可以使用new和delete在类的函数成员内申请动态空间,还可以为单个对象和对象数组申请动态空间,关键字new可自动计算对象的大小,而且,new和delete会自动激活对象的构造函数和析构函数,这都是malloc和free无法做到的,因此,不推荐用malloc和free为对象和对象数组分配动态内存空间。