在C++中一个类在创建后,并非空类,而会自动生成6个默认成员函数:构造函数、析构函数、拷贝构造函数、赋值操作符重载、取地址函数、const取地址函数,这一篇我们介绍构造函数和析构函数。
构造函数
构造函数在类中的作用是初始化对象,即编译器生成默认的构造函数会对自定类型成员调用的它的默认成员函数;在对象的生命周期内只调用一次并且是自动调用;其函数名必须与类名相同且没有返回值;构造函数可以重载,编译器自动生成的构造函数无参。
class A
{
public:
// 1.无参构造函数
A()
{}
// 2.带参构造函数
A(int a, int b , int c)
{
m_a = a;
m_b = b;
m_c = c;
}
private:
int m_a;
int m_b;
int m_c;
};
class B
{
private:
// 基本类型(内置类型)
int m_a;
int m_b;
int m_c;
// 自定义类型
A x;
};
int main()
{
A c(); //函数声明,不是实例化
A c; // 调用无参构造函数
A d(1, 2, 3); // 调用带参的构造函数
A e;
return 0;
}
析构函数
构造函数创建的对象在销毁时,完成类的一些资源清理工作的函数叫析构函数。析构函数的定义是类名前加 ~ ;析构函数只有一个且无返回值;对象生命周期结束,c++编译器会自动调用析构函数。
class A
{
public:
A(int a, int b, int c)
{
m_a = a;
m_b = b;
m_c = c;
m_d = (int*)malloc(5 * sizeof(int));
}
~A()
{
// 释放堆空间
free(m_d);
m_d = NULL;
}
private:
int m_a;
char m_b;
double m_c;
int* m_d;
};
类的析构函数调用完全按照构造函数调用的相反顺序进行调用;全局对象先于局部对象进行构造;静态对象先于普通对象进行构造。