一、什么是构造函数和析构函数
构造函数是一种特殊的成员函数,与其他函数不同,不需要用户调用它,而是创建对象的时候自动调用。
析构函数是对象不再使用的时候,需要清理资源的时候调用。
二、构造函数和析构函数的基本语法
1. 构造函数:
a.C++中的类需要定义与类名相同的特殊成员函数时,这种与类名相同的成员函数叫做构造函数;
b.构造函数可以在定义的时候有参数;
c.构造函数没有任何返回类型。
d.构造函数的调用: 一般情况下,C++编译器会自动的调用构造函数。特殊情况下,需要手工的调用构造函数。
class Test
{
public:
//构造函数
Test()
{
}
}
2、析构函数:
a.C++中的类可以定义一个特殊的成员函数清理对象,这个特殊的函数是析构函数;
b.析构函数没有参数和没有任何返回类型;
c.析构函数在对象销毁的时候自动调用;
d.析构函数调用机制: C++编译器自动调用。
class Test
{
~Test()
{
}
}
三、构造函数的分类以及调用
a. 无参构造函数
class Test
{
private:
int x;
public:
Test()
{
this->x=10;
}
}
无参构造函数的调用: Test a;
b. 有参构造函数
class Test
{
private:
int x;
public:
Test(int x)
{
this->x=x;
}
}
有参数构造函数的调用时机:
1、Test a(10); 调用有参数构造函数
2、Test b=(2,3); 逗号表达式的值是最后一位,调用有参数构造函数
3、Test c=Test(2); 产生一个匿名对象,直接转化成c(只会调用一次有参数构造函数)
c. 拷贝构造函数: 使用对象a初始化对象b
class Test
{
private:
int x;
public:
Test(const Test& a)
{
this->x=a.x;
}
}
拷贝构造函数的调用时机:
class Test
{
private:
int x;
public:
Test(int x)
{
this->x = x;
cout << "对象被创建" << endl;
}
Test()
{
x = 0;
cout << "对象被创建" << endl;
}
~Test()
{
cout << "对象被释放" << endl;
}
Test(const Test& a)
{
this->x = a.x;
cout << "对象被释放(拷贝构造函数)" << endl;
}
};