当前位置:首页 C++ > 正文

c++虚函数与纯虚函数的区别

作者:野牛程序员:2023-08-07 04:54:38 C++阅读 2893

C++ 中的虚函数和纯虚函数都与多态性(Polymorphism)相关,但它们之间有一些重要的区别:

  1. 虚函数(Virtual Function):

    • 声明方式:虚函数是在基类中使用 virtual 关键字声明的函数,它有一个函数体,但在基类中可以用 virtual 关键字标记为虚函数。

    • 默认实现:虚函数在基类中可以有默认实现,即可以提供一个函数体。如果派生类没有对虚函数进行重写,那么将调用基类的虚函数实现。

    • 继承规则:虚函数在派生类中继续保持虚性,即可以选择在派生类中重写虚函数,也可以保持基类的实现。

class Shape {
public:
    virtual void draw() {
        cout << "Drawing a shape." << endl;
    }
};

class Circle : public Shape {
public:
    void draw() override {
        cout << "Drawing a circle." << endl;
    }
};
  1. 纯虚函数(Pure Virtual Function):

    • 声明方式:纯虚函数是在基类中使用 virtual 关键字声明并初始化为 0 的函数,它没有函数体。纯虚函数的声明形式为 virtual void functionName() = 0;

    • 默认实现:纯虚函数没有默认实现,它只是作为一个接口定义,要求派生类必须实现这个函数。

    • 继承规则:派生类必须实现基类中的纯虚函数,否则派生类也会成为抽象类,无法实例化对象。

class Shape {
public:
    virtual void draw() = 0; // 纯虚函数,没有函数体
};

class Circle : public Shape {
public:
    void draw() override {
        cout << "Drawing a circle." << endl;
    }
};

总结区别:

  • 虚函数是可以有默认实现的,而纯虚函数没有默认实现。

  • 派生类可以选择是否重写虚函数,但必须实现纯虚函数。

  • 含有纯虚函数的类被称为抽象类,无法实例化对象。

使用虚函数和纯虚函数,可以在基类中定义通用的接口,然后在派生类中实现不同的行为,实现多态性和动态绑定。纯虚函数还可以用于定义抽象类,强制派生类实现特定的接口。


野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击