📜  C++ 中的纯虚函数 (1)

📅  最后修改于: 2023-12-03 14:59:48.585000             🧑  作者: Mango

C++中的纯虚函数

在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++中实现多态性和抽象类的重要概念。我们可以利用抽象类定义接口,派生其他类,并实现这些类特有的函数。此外,虚析构函数也是一种非常重要的概念,用于正确释放动态内存分配的对象。