|
|
|
|
|
类类型提供构造函数,当创建类的一个新对象时,自动调用构造函数,完成初始化任务。
|
|
|
|
|
(2)构造函数不能像其他成员函数那样被显式地调用,它在对象创建时被自动调用。
|
|
|
(3)在一个类中可以定义多个构造函数,如果在类定义中没有定义构造函数,那么系统将自动生成一个默认构造函数,这个函数不带任何参数。在构造函数前不能加virtual关键字。
|
|
|
|
|
(2)执行构造函数,一般是初始化一个对象的数据成员。构造函数的函数体完成初始化对象的数据成员,若希望该类所有对象的初始值相同,构造函数可以不使用参数;若希望该类所有对象的初始值不相同,通过使用带参数的结构函数可以做到这一点。
|
|
|
|
|
|
|
与构造函数对应的是析构函数。C++语言通过析构函数来处理对象的善后工作。析构函数主要的功能是对类中动态分配的内存进行释放,它在对象消失时自动调用。析构函数的一般定义形式为:
|
|
|
|
析构函数没有返回类型,没有参数,函数名是类名前加"~"。
|
|
|
|
|
|
可以使用完全限定名方式显式地调用析构函数;若没有显式调用,则一个对象的作用域结束时,系统自动调用析构函数。
|
|
|
用户定义的类类型中,可以没有析构函数,系统会自动给该类类型生成一个析构函数。
|
|
|
在析构函数前可以加virtual关键字。因为在继承关系的多态环境中,究竟是哪个对象的析构函数有时不能确定,这时要使用virtual类型的析构函数。
|
|
|
|
构造从类层次的最根处开始,在每一层中,首先调用基类的构造函数,然后调用成员对象的构造函数。析构则严格按照与构造相反的次序执行,该次序是唯一的,否则编译器将无法自动执行析构过程。一个有趣的现象是,成员对象初始化的次序完全不受它们在初始化表中次序的影响,只由成员对象在类中声明的次序决定。这是因为类的声明是唯一的,而类的构造函数可以有多个,因此会有多个不同次序的初始化表。如果成员对象按照初始化表的次序进行构造,这将导致析构函数无法得到唯一的逆序。
|
|
|