📅  最后修改于: 2023-12-03 14:59:48.585000             🧑  作者: Mango
在C++中,纯虚函数是一种特殊的虚函数,它没有实现,只是一个“占位符”,用于表明子类中必须实现该函数。这是实现多态性和抽象类的关键概念之一。
纯虚函数的定义和普通函数的定义有一些区别:在函数声明后面添加一个“= 0”表示这是一个纯虚函数,例如:
class Shape {
public:
virtual double area() const = 0;
};
这里定义了一个只含有一个纯虚函数的抽象类Shape。子类继承Shape后必须实现area()函数。
含有至少一个纯虚函数的类被称为抽象类。抽象类不能实例化,只能作为接口使用。例如:
Shape s; // 错误,不能实例化抽象类
我们可以利用抽象类定义一个接口,派生其他类,并实现这些类特有的函数。例如:
class Circle : public Shape {
public:
Circle(double r) : _radius(r) {}
virtual double area() const override { return 3.14159 * _radius * _radius; }
private:
double _radius;
};
class Rectangle : public Shape {
public:
Rectangle(double w, double h) : _width(w), _height(h) {}
virtual double area() const override { return _width * _height; }
private:
double _width, _height;
};
虚析构函数是一种特殊的析构函数,能够保证当我们使用指向派生类对象的基类指针时,能正确地调用到派生类的析构函数。在使用动态内存分配时,需要定义一个虚析构函数,例如:
class Base {
public:
virtual ~Base() {}
};
class Derived : public Base {
public:
~Derived() { delete[] _data; }
private:
int* _data;
};
当使用基类指针释放Derived对象时,会自动调用Derived的析构函数。
纯虚函数是C++中实现多态性和抽象类的重要概念。我们可以利用抽象类定义接口,派生其他类,并实现这些类特有的函数。此外,虚析构函数也是一种非常重要的概念,用于正确释放动态内存分配的对象。