2.4、构造函数与析构函数
1.4.1 构造函数
1>、构造函数作用
- 用来在创建对象时初始化对象,总与new运算符一起使用在创建对象的语句中。
- 一个类可以有多个构造函数,可根据其参数个数的不同或参数类型的不同来区分它们即构造函数的重载。
- 一般不提倡在构造函数中加入与初始化无关的内容,以保持程序的清晰。
2>、构造函数特点
- 构造函数不需要用户来调用它,而是在建立对象时自动执行。
- 构造函数的名字必须与类名同名。
- 构造函数不具有任何类型,不返回任何值。
- 构造函数只在建立对象的时候自动被调用一次。
- 构造函数必须是公共的,否则无法生成对象。
3>、默认构造函数(缺省构造函数)
- 如果用户未定义构造函数,系统会自动提供一个默认构造函数,但它的函数体是空的,不起初始化作用。
- 如果用户自己定义了一个构造函数,C++就不再提供默认的构造函数了。
1> 默认构造函数的两种方式
- 默认构造函数 = 不带参数的构造函数(例:Person() )
- 默认构造函数 = 带参数的构造函数+缺省值(例:Person(char *name = “ning”, int age = 20) );
1.4.2、析构函数
1>、析构函数的作用
- 在撤销对象占用的内存之前完成一些清理工作,使这部分内存可以被程序分配给新对象使用。
- 如果用户没有定义析构函数,C++ 编译系统会自动生成一个析构函数。
- 默认析构函数实际什么操作都不进行。
2>、默认的析构函数
- 析构函数不能有任何参数。
- 这个析构函数也不做任何操作。
- 如果用户自己定义了一个析构函数,C++就不再提供默认的析构函数了。
3>、程序执行析构函数的几种情况
- 当函数被调用结束时,对象释放,在对象释放前自动执行析构函数。
- static局部对象和全局对象只在 main函数结束或调用 exit函数结束程序时,调用static局部对象的析构函数。
- 如用new 运算符动态地建立的对象,当用delete运算符释放该对象时,先调用该对象的析构函数。
4>、构造和析构的作用
- 把对象的初始化工作放在构造函数中,把清除工作放在析构函数中。
- 当对象被创建时,构造函数被自动执行。
- 当对象消亡时,析构函数被自动执行。
5>、例子
#include <iostream>
using namespace std;
class Person
{
public:
Person();
Person(int id, int age);
~Person();
private:
int m_id;
int m_name;
};
Person::Person()
{
}
Person::Person(int id, int age)
{
m_id = id;
m_age = age;
}
~Person()
{
}
int main()
{
return 0;
}