请解释多态的含义,并概括描述 C++ 中多态的实现方式与典型应用场景。
考察说明
考查对多态概念的理解及C++中具体实现机制的掌握。
回答思路
- 【回答框架 1】多态是面向对象的核心特性之一,指同一操作作用于不同对象时产生不同行为,分为编译时多态(重载、模板)和运行时多态(虚函数)。
- 【回答框架 2】C++中运行时多态通过虚函数和基类指针或引用实现:基类声明虚函数,派生类重写,调用时根据实际对象类型动态绑定。
- 【回答框架 3】虚函数依赖虚表(vtable)存储函数地址,每个含虚函数的类有一个虚表指针(vptr),对象构造时初始化。
- 【回答框架 4】典型应用如统一接口处理不同派生类对象,例如绘图程序中的Shape基类和Circle、Rectangle派生类,通过基类指针调用各自的draw方法。
- 【回答框架 5】使用建议:析构函数通常声明为虚函数以正确释放派生类资源,但虚函数有一定调用开销,不适用于性能敏感且无需扩展的场景。
- 【关键点 1】多态分为编译时(重载/模板)和运行时(虚函数)两种。
- 【关键点 2】运行时多态需要虚函数、基类指针或引用以及派生类重写。
- 【关键点 3】虚函数通过vptr和vtable实现动态绑定。
- 【关键点 4】基类析构函数应尽量为虚函数。
- 【关键点 5】虚函数调用有额外开销,需权衡使用。
- 【易错点 1】将重载误认为运行时多态,实为编译时静态绑定。
- 【易错点 2】忘记将基类析构函数设为虚函数,导致派生类资源未释放。
- 【易错点 3】认为虚函数总是比普通函数调用慢很多,实际现代编译器常做去虚拟化优化。