0%

C++之类的构造函数和析构函数

构造函数

类的初始化由构造函数完成, 如果没有为某个类编写构造函数, 编译器会自动这个类生成一个默认的构造函数. 构造函数主要用来在创建类的对象时为对象的成员变量赋值.

一个类可以有多个构造函数, 可以根据其参数个数或参数类型的不同进行区分, 即构造函数的重载.

构造函数的命名必须与类名完全相同; 其次, 构造函数主要用于初始化对象的状态, 因此没有返回值, 也不能用void修饰. 最后构造函数不能被直接调用, 必须在创建对象时才会自动调用.

一个类的构造函数的声明应是如下形式:

类名(参数表)

构造函数的实现可以在类内部完成, 也可以在类体外进行:

class Person{
public:
    int age;
    string name;
    Person();
    Person(int age, string name);

};

Person::Person(){
    age = 0;
    name = "hello";
}	

Person::Person(int newAge, string newName){
    age = newAge;
    name = newName;
}	

另外, 构造函数还可以用一种被称为初始化列表的方式来初始化成员变量, 代码如下:

Person::Person():age(0),name("hello"){
    
}		

Person::Person(int newAge, string newName):age(newAge), name(newName){

}	
    

这两种写法功能上没有任何区别, 但在使用继承时可以使用初始化列表对基类的成员属性进行初始化. 此外, 初始化列表中不能为数组类型的成员变量赋值.

析构函数

析构函数的语法与构造函数类似, 区别在于析构函数名前面有一个标记符号~. 析构函数同样没有返回值:

Person::~Person(){
    cout << "person die!" << endl;
}

当对象被销毁时会自动调用析构函数.