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

C++中虚函数和纯虚函数详解

作者:野牛程序员:2023-08-06 20:53:20 C++阅读 2834

在 C++ 中,虚函数和纯虚函数是面向对象编程的重要概念,用于实现多态性和多继承等特性。它们是在基类中声明并在派生类中进行重写的函数。

  1. 虚函数(Virtual Function): 虚函数是在基类中使用 virtual 关键字声明的函数。它允许在派生类中进行函数的重写(覆盖),以便根据对象的实际类型调用正确的函数。通过虚函数,可以实现运行时多态性(Run-time Polymorphism),即在运行时根据对象的实际类型来调用正确的函数实现。

class Shape {
public:
    virtual void draw() {
        // 基类中的虚函数,可以在派生类中进行重写
        cout << "Drawing a shape." << endl;
    }
};

class Circle : public Shape {
public:
    void draw() override {
        // 派生类中的虚函数重写
        cout << "Drawing a circle." << endl;
    }
};

int main() {
    Shape* shape1 = new Shape();
    Shape* shape2 = new Circle();

    shape1->draw(); // 输出:"Drawing a shape."
    shape2->draw(); // 输出:"Drawing a circle."

    delete shape1;
    delete shape2;
    return 0;
}
  1. 纯虚函数(Pure Virtual Function): 纯虚函数是在基类中使用 virtual 关键字声明并初始化为 0 的函数。它没有函数体,派生类必须实现这个函数,否则派生类也将成为抽象类,无法实例化对象。纯虚函数用于定义接口,强制派生类实现共同的行为。

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

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

int main() {
    // Shape* shape = new Shape(); // 错误,不能实例化抽象类
    Shape* circle = new Circle();
    circle->draw(); // 输出:"Drawing a circle."

    delete circle;
    return 0;
}

总结:

  • 虚函数通过在基类中声明并在派生类中重写,实现运行时多态性。

  • 纯虚函数在基类中声明并初始化为 0,要求派生类必须实现这个函数,用于定义接口。

  • 抽象类包含纯虚函数,无法实例化对象,只能被继承并实现纯虚函数。


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

最新推荐

热门点击