8.5 对象的创建和撤销

    代码8.4 中,通过自定义的公共成员函数SetBrand是SetPrice实现对对象数据成员的初始化。实际上,C++为类提供了两种特殊的成员函数,一是构造函数,在对象创建时自动调用,用以完成对象成员变量等的初始化及其他操作(如为指针成员动态申请内存空间等);另一个是析构函数,在对象撤销时自动调用,用以执行一些清理任务,如释放成员函数中动态申请的内存等。

    8.5.1 构造函数的作用

    当创建对象时,自动调用构造函数。构造函数有其独特的地方,如函数的名字与类名相同,以及没有返回类型和返回值。其主要工作有以下3个。

    ❑给对象一个标识符。

    ❑为对象数据成员开辟内存空间。

    ❑完成对象数据成员的初始化(函数体内的工作,由程序员完成)。

    上述3点也说明了构造函数的执行顺序,在执行函数体之前,构造函数已经为对象的数据成员开辟了内存空间,这时,在函数体内对数据成员的初始化便顺理成章了。

    如果用户没有显式地定义构造函数,编译器将为类生成“默认构造函数”,默认构造函数不能完成对象数据成员的初始化,只是给对象标识符,同时为对象数据成员开辟内存空间,代码8.4中采用的是默认构造函数,所以,需要另外定义成员函数以改写数据成员brand和price。默认的构造函数是无参的,下述代码中,point类定义了显式的无参构造函数。


    class point { private: int xPos; int yPos; public: point(); }; point:point() { xPos=0; yPos=0; }

    当然,作为一种成员函数,构造函数是在类定义的同时进行定义还是在类定义的外部进行定义都可以,关于构造函数的补充内容请参见后续的讲解。