多态是面向对象编程(OOP)的一个重要特性,它允许我们使用统一的接口来处理不同类型的对象。简单来说,就是同一个操作作用于不同的对象时,可以有不同的解释和效果。在C++中,多态主要通过虚函数实现,分为静态多态(编译时多态)和动态多态(运行时多态)。
多态的主要作用是解决项目中的紧耦合问题,提供程序的可扩展性。通过多态,应用程序不必为每一个实现子类的功能调用编写单独的代码,提高了代码的复用性和可维护性。
C++中的动态多态通过虚函数和虚函数表实现。编译器会为包含虚函数的类生成一个虚函数表(vtable),该表是一个函数指针数组,存放了类中所有虚函数的入口地址。类实例化成对象后,对象首地址处会存放一个指向虚函数表的指针(vptr)。当通过父类指针或引用调用虚函数时,会根据对象的实际类型(即运行时类型),在虚函数表中查找对应的函数指针,然后调用具体的实现代码。
virtual关键字修饰的类成员函数,允许在派生类中被重写。virtual void functionName() = 0;。- #include
- using namespace std;
-
- class People {
- public:
- virtual void myFunction() {
- cout << "父类的虚函数" << endl;
- }
- virtual ~People() {} // 虚析构函数
- };
-
- class Xishi : public People {
- public:
- void myFunction() override { // C++11 引入 override 关键字
- cout << "西施的虚函数" << endl;
- }
- };
-
- void callFunction(People* p) {
- p->myFunction();
- }
-
- int main() {
- People* p = new Xishi();
- callFunction(p); // 调用西施的虚函数
- delete p;
- return 0;
- }