类 {#类}
构造函数 {#构造函数}
和类名相同,无返回值的叫做构造函数。
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类图 {#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; }
|