构造函数与析构函数
构造函数引入
在结构体中,数据成员默认是公有权限,而为了避免,其中一个初衷是数据隐藏;因此类中数据成员是私有的,程序不能直接访问数据成员,需要设计公有的成员函数来访问数据成员。为了避免用户再调用其他成员函数之前调用acquire(),采用创建对象之时自动对它进行初始化
----------类构造函数
构造函数特征
- 函数名与类名相同
- 无返回值
- 支持重载
- 实例化对象时编译器自动调用构造函数
声明和定义构造函数
```cpp
class Date
{
public:
void SetDate(int year, int month, int day)
{
_year = year;
_month = month;
_day = day;
}
private:
int _year;
int _month;
int _day;
};
这里注意区分成员名和参数名构造函数的参数表示的不是类成员,而是赋给成员的值,因此参数名不能与成员名同名;通常做法是在数据成员名加前缀或者后缀。
默认构造函数
默认构造函数是在未提供显式初始值时,用来创建对象的构造函数;当且仅当没有定义任何构造函数时,编译器才会提供默认构造函数(仅有一个默认构造函数)。
形式:
-
Stock(int n = 0,double pr = 0.0);;//为已有的构造函数的参数值提供默认值
-
Stock()
{
数据成员变量=初始值;
} //无参构造函数 -
程序员没写,编译器默认生成的构造函数(也被称为默认构造函数)
注意点:
- 为类定义了构造函数后,必须为它提供默认构造函数。避免出现形如Stock stock1;这样创建对象带来的调用构造函数的错误。
- 如果通过无参构造函数创建对象时,对象后面跟括号,否则就成了函数声明。形如:**Stock stock1();**被编译器当作返回值为Stock类型的stock1函数。
析构函数引入
与构造函数相反,析构函数完成清理工作;例如如果构造函数使用new来分配内存,则析构函数将使用delete来释放这些内存。(对象生命周期结束时,编译系统自动调用)
析构函数
形式:
~Stock()
{
//相关清理工作代码块
}
特征:
- 无参数,无返回值;
- 一个类只有一个析构函数。若未显示定义,系统自动生成默认的析构函数。
其他
- 类的析构函数调用完全按照构造函数调用的相反顺序进行调用;
- 全局对象先于局部对象进行构造;
- 静态对象先于普通对象进行构造。