默认构造函数和析构函数的特点
时间: 2024-06-12 07:08:07 浏览: 266
默认构造函数和析构函数是在没有显式定义的情况下由编译器自动生成的函数。
默认构造函数没有参数,用于创建对象时初始化成员变量的默认值。默认析构函数也没有参数,用于清理对象在销毁时所占用的资源。
默认构造函数和析构函数的特点如下:
1. 默认构造函数和析构函数是公共的,可以被外部访问。
2. 默认构造函数和析构函数不需要显式地调用,它们会在对象的创建和销毁时自动调用。
3. 如果类中没有定义构造函数和析构函数,编译器会自动生成默认的构造函数和析构函数。
4. 如果类中定义了构造函数或析构函数,但没有定义默认构造函数或析构函数,编译器就不会自动生成默认的构造函数或析构函数。
5. 默认构造函数和析构函数可以被重载,但是它们必须具有相同的函数名和参数列表。
相关问题
C++实验:默认构造函数和析构函数
默认构造函数和析构函数是C++中的特殊成员函数,它们在对象创建和销毁时自动调用。
默认构造函数是一个没有参数的构造函数,如果类没有定义任何构造函数,那么编译器会自动生成默认构造函数。
析构函数是一个没有参数的特殊成员函数,用于在对象销毁时执行清理操作。如果类没有定义析构函数,编译器会自动生成一个默认析构函数。
下面是一个简单的例子:
```c++
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass() {
cout << "默认构造函数被调用" << endl;
}
~MyClass() {
cout << "析构函数被调用" << endl;
}
};
int main() {
MyClass obj;
return 0;
}
```
输出:
```
默认构造函数被调用
析构函数被调用
```
在上面的例子中,我们定义了一个名为MyClass的类,并在其中定义了默认构造函数和析构函数。在main函数中,我们创建了一个MyClass对象,当对象创建时,它会自动调用默认构造函数,当对象销毁时,它会自动调用析构函数。
注意,当我们没有定义析构函数时,编译器会自动生成一个默认析构函数,它会自动调用对象中的所有成员变量的析构函数。如果对象中没有成员变量需要清理,那么默认析构函数就是一个空函数。
定义一个rectangle类,编写构造函数和析构函数,定义一个circle类,编写构造函数和析构函数,定义二者的一个友元函数getTotalArea(),计算二者的面积和
首先,让我们定义一个Rectangle类,它包含长和宽属性以及相应的构造函数和析构函数:
```cpp
class Rectangle {
private:
double length;
double width;
public:
// 构造函数
Rectangle(double l, double w) : length(l), width(w) {}
// 计算矩形面积的成员函数
double getArea() const { return length * width; }
// 析构函数,无特别操作,这里默认不显示
~Rectangle() {}
// 友元函数,用于获取总面积
friend double getTotalArea(Rectangle rect, Circle circle);
};
```
接下来,我们定义Circle类,同样包含半径属性以及构造函数和析构函数:
```cpp
class Circle {
private:
double radius;
public:
Circle(double r) : radius(r) {}
// 计算圆面积的成员函数
double getArea() const { return M_PI * radius * radius; }
// 析构函数,同上,默认不显示
~Circle() {}
// 友元函数,用于获取总面积
friend double getTotalArea(Rectangle rect, Circle circle);
};
```
最后,友元函数`getTotalArea()`负责计算两者面积之和:
```cpp
// 友元函数,计算矩形和圆的总面积
double getTotalArea(Rectangle rect, Circle circle) {
return rect.getArea() + circle.getArea();
}
```
使用这两个类时,你可以创建实例并调用`getTotalArea`来获取总面积:
```cpp
int main() {
Rectangle rectangle(5, 3);
Circle circle(2.5);
double total_area = getTotalArea(rectangle, circle);
std::cout << "Total area of rectangle and circle: " << total_area << std::endl;
return 0;
}
```
阅读全文