构造函数
作用
注意:编译器提供的默认 构造函数 和 析构函数 是空
主要作用于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无需手动调用。
格式
构造函数:类名(){}
特性
1.构造函数没有返回值也不写void,名字和类名相同 可以重载
2.当我们没有实现构造函数时编译器会自动提供默认的构造函数
3.当创建对象时编译器自动调用构造函数
#include<iostream>
using namespace std;
class A
{int n;int* p=NULL;
public:A(){cout << "无参构造" << endl;};A(int n) {cout << "有参构造" << endl;this->n = n;if (n > 0)p = new int[n];}~A(){if (p)delete[]p;else p = NULL;}
};int main() {A* a = new A;//调用无参构造delete a;A* a1 = new A();//调用无参构造delete a1;A* a2 = new A[3];//调用无参构造 delete[]a2;A* a3 = new A[3]{ A(1),A(2),A(3) };//调用有参构造delete[]a3; }
析构函数
作用
主要作用于对象销毁前系统自动调用,执行一些清理工作(例如关闭文件、断开网络连接等。)。是用来释放成员变量指向的堆区内存的
格式
析构函数:~类名(){}
特性
1.没有返回值也不写void
2.名字是~+类名,
3.没有函数参数,不可以发生重载
4.没有析构函数 编译器会提供默认的析构函数
5.程序在对象销毁前会自动调用析构函数,不用手动调用,而且只会调用一次
//析构函数:可以释放成员变量指向的堆区内存
class Rectangle {
private: double* length; double* width;
public: // 构造函数 Rectangle(double l, double w) { length = new double(l); // 动态分配内存 width = new double(w); } // 析构函数 ~Rectangle() { delete length; // 释放动态分配的内存 delete width; } double area() { return *length * *width; // 计算面积 }
}; int main() { Rectangle rect(5.0, 3.0); // 调用构造函数 cout << "Area: " << rect.area() << endl; // 输出面积 return 0; // rect 被销毁,自动调用析构函数
}
总结
构造函数:用于初始化对象的状态;在对象创建时自动调用。
析构函数:用于清理对象的资源;在对象销毁时自动调用