多态与虚函数:面试官问“底层怎么实现的”,这样答直接拿满分

上篇聊了继承,今天讲继承的"灵魂搭档"——多态。

多态是面向对象三大特性里最"高级"的一个。面试的时候,如果候选人能把多态讲清楚,特别是虚函数的底层实现,我基本就认定这个人的C++功底没问题。

讲个面试场景。

面试官问:"什么是多态?"

大部分人说:"同一个接口,不同的行为。"

面试官追问:"底层怎么实现的?"

很多人就开始含糊了:"虚函数……虚表……具体不太记得了。"

今天把多态和虚函数从表层到深层一次讲透。

没有多态的世界

先看看没有多态会怎样。假设你有激光雷达、相机、IMU三种传感器,每种都有init()操作。你要写一个函数初始化所有传感器,问题来了——三种类型不一样,没法放在同一个容器里用统一的接口调用。

这就是多态要解决的问题——让不同类型的对象,通过统一的接口来操作。

虚函数:多态的关键

实现多态,需要一个基类和虚函数:

class Sensor { public: virtual void init() { cout << "Initializing base sensor..." << endl; } }; class LidarSensor : public Sensor { public: void init() override { cout << "Initializing lidar..." << endl; } }; class CameraSensor : public Sensor { publ