一.简介
对象的初始化和清理是非常重要的两个问题,对象或变量没有初始状态,对其使用后果是未知的,同样的使用完一个对象或变量,没有及时清理,也会造成一定的安全问题。
c++利用构造函数和析构函数解决上述问题,如果我们不提供构造和析构,编译器构造函数和析构函数的空实现。
构造函数
主要作用创建对象时为成员属性赋值,构造函数由编译器自动调用,无须手动调用。
析构函数
主要用于在对象销毁前系统自动调用,,执行一些清理工作。
二.语法
构造函数语法
类名(){}
1.构造函数,没有返回值也不写void
2.函数名称与类名相同
3.构造函数可以有参数,因此可以发生重载
4.程序在调用对象时会自动调用构造函数,无须手动调用,而且只会调用一次
析构函数语法
~类名(){}
1.析构函数,没有返回值也不写void
2.函数名称与类名相同,在名称前加上~
3.析构函数不可以有参数,因此不可以发生重载
4.程序在对象销毁前会自动调用析构,无须手动调用,而且只会调用一次
class person
{
public:
person()
{
cout << "构造函数的调用"<<endl;
}
~person()
{
cout << "析构函数的调用";
}
};
int main()
{
person p;//创建对象时候自动调用构造函数
system("pause");//按下任意键之后才跳出析构函数的调用 证明在对象销毁前调用
}
三.构造函数的分类和调用
分类方式:
两种分类方式:有参构造和无参构造
按类型分类:普通构造和拷贝构造
调用方法:
括号法
注意事项:调用无参构造时不要加括号,因为 person p();会被误认为函数的声明
class person
{
public:
//无参构造函数调用
person()
{
cout << "无参构造函数的调用"<<endl;
}
//有参构造函数调用
person(int a)
{
age = a;
cout << "有参构造函数的调用" << endl;
}
//拷贝函数构造
person(const person &p)
{
age = p.age;
cout << "拷贝函数