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

详细讲解C++中什么是虚函数和纯虚函数,以及它们的区别

作者:野牛程序员:2023-05-19 07:22:48 C++阅读 2535

在C++中,虚函数是一种特殊的成员函数,用于实现多态性(polymorphism)。当一个基类指针或引用指向派生类对象时,通过调用虚函数,可以在运行时确定要调用的实际函数。

虚函数通过在基类中使用关键字virtual进行声明。派生类可以覆盖(override)基类的虚函数,这意味着它们可以提供自己的实现。在运行时,调用虚函数时将根据实际对象的类型来确定调用哪个函数。

以下是虚函数的示例:

class Base {
public:
    virtual void foo() {
        cout << "Base::foo()" << endl;
    }
};

class Derived : public Base {
public:
    void foo() override {
        cout << "Derived::foo()" << endl;
    }
};

int main() {
    Base* ptr = new Derived();
    ptr->foo();  // 输出 "Derived::foo()"
    delete ptr;
    return 0;
}

纯虚函数是一种在基类中声明但没有实现的虚函数。通过在函数声明的末尾使用= 0,可以将其声明为纯虚函数。基类中包含纯虚函数的类被称为抽象类,它不能被实例化。派生类必须实现纯虚函数才能成为具体类。

以下是纯虚函数的示例:

class AbstractBase {
public:
    virtual void foo() = 0;  // 纯虚函数声明
};

class ConcreteDerived : public AbstractBase {
public:
    void foo() override {
        cout << "ConcreteDerived::foo()" << endl;
    }
};

int main() {
    AbstractBase* ptr = new ConcreteDerived();
    ptr->foo();  // 输出 "ConcreteDerived::foo()"
    delete ptr;
    return 0;
}

虚函数和纯虚函数之间的区别如下:

  1. 实现:虚函数在基类中具有默认的实现,可以在派生类中选择性地覆盖。纯虚函数没有默认实现,派生类必须提供自己的实现。

  2. 实例化:虚函数所在的类可以被实例化,但纯虚函数所在的类不能被实例化,只能作为基类使用。

  3. 强制实现:派生类必须实现纯虚函数才能成为具体类,而对于虚函数,派生类可以选择是否覆盖基类的实现。

  4. 接口定义:纯虚函数常用于定义接口,它们提供了一种规范,要求派生类提供特定的功能。虚函数则用于提供默认的实现,但可以在派生类中进行修改。

总之,虚函数和纯虚函数都是用于实现多态性的重要概念。虚函数提供了默认实现和覆盖的能力,而纯虚函数用于定义接口和强制派生类提供实现。


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

最新推荐

热门点击