📜  C++ |虚函数|问题13(1)

📅  最后修改于: 2023-12-03 15:13:58.251000             🧑  作者: Mango

C++ | 虚函数 | 问题13

在C++中,虚函数的作用是实现多态性。当我们用基类指针或引用指向派生类对象时,虚函数会被动态绑定到派生类对象中的实现。

什么是虚函数?

虚函数是在基类中声明的成员函数,带有关键字 virtual。派生类可以覆盖基类中的虚函数,提供自己的实现。

class Shape {
public:
   virtual void draw() {
      std::cout << "Shape::draw()" << std::endl;
   }
};

class Circle : public Shape {
public:
   void draw() {
      std::cout << "Circle::draw()" << std::endl;
   }
};

Shape *shape = new Circle;
shape->draw(); // 输出 Circle::draw()

在上面的例子中,Shape 类中的 draw() 函数被声明为虚函数。Circle 类重写了 Shape 类的 draw() 函数,实现了自己的版本。当使用基类指针指向一个 Circle 类的实例时,Circle 类的版本被调用,输出 Circle::draw()

什么是纯虚函数?

纯虚函数是没有实现体的虚函数,它们的声明以 = 0 结尾。

class Shape {
public:
   virtual void draw() = 0;
};

上述代码中的 draw() 函数被声明为纯虚函数。这意味着它没有实现体,必须由派生类提供实现。

为什么要使用虚函数?

使用虚函数的主要原因是实现多态性。当我们使用基类指针或引用指向派生类对象时,虚函数会被动态绑定到派生类对象中的实现。

Shape *shape;
shape = new Circle;
shape->draw(); // 输出 Circle::draw()

shape = new Square;
shape->draw(); // 输出 Square::draw()

在上述代码中,shape 可以指向不同的派生类对象,在调用 draw() 函数时会根据实际的派生类类型选择正确的实现。

总结

虚函数是实现多态性的重要机制。在使用基类指针或引用指向派生类对象时,虚函数会被动态绑定到派生类对象中的实现。从而实现了运行时多态。纯虚函数则是定义接口的重要方式,它们没有实现体,必须由派生类提供实现。