构造函数

和类名相同,无返回值的叫做构造函数。

eg.


在这个例子里,创建了Circle的类,并创建了2个构造函数Circle()(构造函数前无函数声明),2个构造函数分别有参数和无参数,重载函数对应初始值和设定值。

当创建对象circle1执行Circle circle1时会执行构造函数,无参数传入则调用无参的构造函数。

当创建对象circle2执行Circle circle2(25)时会执行构造函数,有参数传入则调用有参对应的的构造函数。

this->用于指向对象内的变量,可以区分。

eg

1
fan(int speed,bool on,double radius){this->speed = speed,this->on = on,this->radius = radius;}

UML类图

析构函数

constructor 构造函数(可以多个,可以重载)
destructor 析构函数(只有一个,不能带参)

类中,系统自带构造函数和析构函数,如果手动创建,则不自带。

~类名(){}归还类所占用的空间

析构函数(Destructor)是在对象被销毁时自动调用的特殊成员函数。它的主要作用是执行一些清理工作,释放对象在生命周期中分配的资源,例如内存、文件句柄、网络连接等。析构函数的名称与类名相同,但在名称前加上波浪号(~)。

当对象超出其作用域,程序退出,或者通过delete运算符释放动态分配的内存时,析构函数会被调用。这确保在对象生命周期结束时,相关的资源可以得到正确的释放,防止资源泄漏。

而且先调用的,后撤销, 后调用的,先撤销

对象超出其作用域: 当一个对象在一个代码块中声明并创建,当该代码块执行结束时,对象就超出了其作用域。此时,析构函数会被调用,{}块内的代码将执行。

1
2
3
4
5
6
{
MyClass obj; // 构造函数被调用

// 在这个代码块结束时,obj 超出了作用域,析构函数被调用
} // 析构函数被调用

delete运算符释放动态分配的对象: 如果对象是通过new运算符动态分配内存而创建的,当使用delete运算符释放该对象时,析构函数会被调用。

1
2
3
4
5
6
MyClass* objPtr = new MyClass(); // 构造函数被调用

// 在这里进行一些操作

delete objPtr; // 析构函数被调用

程序结束: 当整个程序结束运行时,全局对象的析构函数会被调用。

1
2
3
4
5
6
7
8
9
MyClass globalObj; // 构造函数被调用

int main() {
// 主程序执行

// 全局对象 globalObj 在程序结束前析构函数被调用

return 0;
}