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

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

C++ | 虚函数 | 问题12

什么是虚函数?

虚函数是一个在基类中声明的函数,用关键字 virtual 声明,被派生类重新定义后,用派生类对象调用时,能够根据对象的类型自动选择调用相应的派生类函数。

class Base {
 public:
  virtual ~Base() {} // 声明虚析构函数
  virtual void foo() { cout << "Base: foo" << endl; }
};

class Derived : public Base {
 public:
  virtual void foo() override { cout << "Derived: foo" << endl; }
};
为什么需要虚函数?

虚函数使得我们可以通过基类指针或引用调用派生类的函数,由于绑定的是运行时类型,所以不需要手动指定调用的函数,避免了手动的 switch 或 if 判断,使得程序更加灵活和扩展性高。

Base* base = new Derived();
base->foo(); // 输出 Derived: foo
虚函数的注意事项
  1. 构造函数和静态成员函数不能是虚函数。
  2. 虚函数会增加每个对象的大小,因为要存储虚函数表指针。
  3. 如果派生类需要覆盖基类的虚函数,应该使用 override 关键字声明,避免出现意外的问题。
  4. 析构函数要声明为虚析构函数,否则释放时可能会出现内存泄漏问题。
总结

虚函数是 C++ 面向对象编程中的重要特性,通过它我们可以实现多态、继承等 OO 概念。使用虚函数可以让程序更加灵活和具有扩展性,但也要注意虚函数的注意事项,以避免出现程序错误。