C++上的多态
在 C++ 中,多态(Polymorphism)同样是面向对象编程中的重要概念。C++ 支持两种形式的多态:编译时多态和运行时多态。
1. 编译时多态(静态多态)
编译时多态是在编译期间决定调用的函数实现,主要通过函数重载(Function Overloading)和运算符重载(Operator Overloading)来实现。
函数重载示例:
在上面的代码中,add
函数被重载了两次,根据传递的参数类型,编译器决定调用哪一个 add
函数。
运算符重载示例:
这里重载了加法运算符 +
,使得它能够处理 Complex
类的对象。
2. 运行时多态(动态多态)
运行时多态主要通过继承和虚函数(Virtual Functions)实现。当使用基类指针或引用指向派生类对象时,调用虚函数可以根据对象的实际类型执行不同的行为。这是在程序运行时根据对象的动态类型决定调用哪个函数实现。
示例:
虚函数与多态:
在这个例子中,Animal
类有一个虚函数 speak
。当通过 Animal
的指针 animal
调用 speak
函数时,根据对象的实际类型(Dog
或 Cat
),会调用各自的 speak
函数。这就是运行时多态的核心。
关键点:
虚函数:必须在基类中将函数声明为
virtual
,以便在派生类中实现多态。覆盖(override):派生类可以重写基类的虚函数,实现不同的行为。
基类指针或引用:多态通常通过基类的指针或引用来调用派生类的重写方法。
总结
编译时多态:通过函数重载和运算符重载实现,编译期间决定调用哪一个函数。
运行时多态:通过继承和虚函数实现,运行时根据对象的动态类型调用合适的方法。
C++ 的多态特性极大地增强了代码的可扩展性和灵活性。
Last updated