头歌C++实训析构函数和析构函数的使用
时间: 2023-08-12 08:09:03 浏览: 59
析构函数是在对象生命周期结束时自动调用的函数,用于清理对象所占用的资源。析构函数的名称与类名相同,但在名称前加上 ~ 符号。
C++中,析构函数的作用主要有以下几点:
1. 释放动态分配的内存空间,防止内存泄漏;
2. 关闭文件、释放数据库连接等操作,防止资源泄漏;
3. 清理对象内部的变量,例如清空指针变量等。
析构函数的使用方法如下:
1. 构造函数和析构函数是一对,构造函数用于初始化对象,析构函数用于清理对象;
2. 析构函数无参数,也无返回值;
3. 析构函数可以被继承,子类的析构函数会自动调用父类的析构函数;
4. 如果一个类没有定义析构函数,编译器会自动生成一个默认的析构函数,什么也不做。
下面是一个简单的示例代码,演示了析构函数的使用:
```c++
#include <iostream>
using namespace std;
class MyClass {
public:
MyClass() { cout << "Constructor called." << endl; }
~MyClass() { cout << "Destructor called." << endl; }
};
int main() {
MyClass obj;
return 0;
}
```
输出结果为:
```
Constructor called.
Destructor called.
```
可以看出,当对象 `obj` 超出作用域时,析构函数会自动调用,输出 "Destructor called."。
相关问题
头歌c++实训13虚函数
好的,虚函数是一种在父类中声明的函数,其关键字为virtual,且在子类中可以被重新定义的函数。虚函数的作用是实现多态性,即同一个函数名可以被不同的子类重载,从而实现不同的功能。
下面以一个简单的例子来说明虚函数的用法:
```c++
#include <iostream>
using namespace std;
class Shape {
protected:
int width, height;
public:
Shape( int a = 0, int b = 0) {
width = a;
height = b;
}
virtual int area() {
cout << "Parent class area :" <<endl;
return 0;
}
};
class Rectangle: public Shape {
public:
Rectangle( int a = 0, int b = 0):Shape(a, b) { }
int area () {
cout << "Rectangle class area :" <<endl;
return (width * height);
}
};
int main() {
Shape *shape;
Rectangle rec(10,7);
shape = &rec;
// 调用矩形的求面积函数 area
shape->area();
return 0;
}
```
在上面的代码中,Shape 是一个基类,其中有一个虚函数 area(),Rectangle 是一个派生类,它继承了 Shape 并重载了 area() 函数。在 main() 函数中,我们创建了一个 Rectangle 对象,然后将其地址赋给了一个 Shape 指针。通过调用这个指针的 area() 函数,我们可以看到输出了“Rectangle class area”。
这说明在调用派生类的函数时,会优先调用派生类中的同名函数,而不是基类中的函数。这就是多态性的体现。
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对象,当对象创建时,它会自动调用默认构造函数,当对象销毁时,它会自动调用析构函数。
注意,当我们没有定义析构函数时,编译器会自动生成一个默认析构函数,它会自动调用对象中的所有成员变量的析构函数。如果对象中没有成员变量需要清理,那么默认析构函数就是一个空函数。