C++ 虚函数
C++的虚函数是一种特殊的成员函数,可以在派生类中被重写。
虚函数的作用是实现多态性,当我们使用基类指针或引用来调用虚函数时,程序会根据实际的对象类型来调用相应的派生类函数。
我们可以将一个成员函数声明为虚函数,只需要在函数声明前加上关键字 virtual 即可。
比如这样:
C++ 虚函数案例
为方便读者理解,我写个虚函数 demo:
在上述我写的 demo 中,我定义了一个基类 Shape 和一个派生类 Circle,其中 Shape 类中的 draw() 函数被声明为虚函数。
在主函数中,我分别使用基类指针 shape1 和派生类指针 shape2 来调用 draw() 函数。
编译运行结果:
C++ 虚函数注意事项
虚函数只能是类的成员函数,不能是静态成员函数或全局函数。
构造函数和析构函数不能是虚函数,因为它们的调用顺序是确定的,不需要动态确定。
如果一个类中有虚函数,它必须有至少一个虚函数被实现,否则编译器会报错。
在派生类中重写虚函数时,函数签名必须与基类中的虚函数完全相同,否则编译器会报错。
如果派生类中重写虚函数时不使用 override 关键字,编译器会给出警告,但不会报错。
虚函数的调用会带来额外的开销,因为程序需要在运行时查找正确的函数地址。因此,在程序中过多地使用虚函数可能会影响性能。
如果在基类中将虚函数声明为纯虚函数,派生类必须实现该函数,否则派生类也会成为抽象类,无法实例化。