构造函数与析构函数
定义:
在C++中,构造函数和析构函数是用于对象初始化和清理的特殊成员函数。构造函数在对象创建时自动调用,而析构函数在对象销毁前自动调用。
构造函数:
构造函数用于初始化对象的成员变量。它的名称与类名相同,没有返回值(是没有返回值,而不是返回值为空(void))。构造函数可以有参数,也可以没有参数。构造函数可以进行重载,即:一个类可以拥有多个参数列表不同的构造函数。
析构函数:
析构函数在对象销毁前自动调用,名称为~ 类名
,与构造函数相同,也没有返回值,一个类只能拥有一个析构函数。
然而,如果对象是动态分配(使用new
)的,那么需要在使用完成后手动通过delete
进行销毁,而不是依赖对象在作用域结束后的自动析构。
1 2 3 4 5 6 7 8 9 10 11 12
| class A{ private: int a; public: A(int a){ this->a=a; cout<<"A is constructed"<<endl; } ~A(){ cout<<"A is distructed"<<endl; } };
|
使用注意事项:
调用顺序
析构函数的调用顺序与对象的创建顺序相反,这是C++中局部对象生命周期的规则。如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include <iostream> using namespace std;
class A{ string name; public: A(string name) { this->name = name; cout << "A(" << name << ")" << endl; } ~A() { cout << "~A(" << name << ")" << endl; } }; int main() { A a1("a1"), a2("a2"); return 0; }
|
该函数的输出为:
1 2 3 4
| A(a1) A(a2) ~A(a2) ~A(a1)
|
构造函数的重载
可以在以不同的方式进行创建对象的时候调用不同的构造函数,直接上🌰:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| #include <iostream> using namespace std;
class A { private: int a, b, c; public: A() { a = 0; b = 0; c = 0; cout << "A" << endl; } A(int a, int b, int c) { this->a = a; this->b = b; this->c = c; cout << "A" << endl; } ~A() { cout << "~A" << endl; } };
int main() { A test; A test2(1,2,3); return 0; }
|