news 2026/4/14 18:26:03

C++面试高频:多态与虚函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++面试高频:多态与虚函数

 

C++面试高频:多态与虚函数

大家在准备 C++ 面试时,多态与虚函数也是一个绕不过去的高频考点。
它不只是知道概念这么简单,面试官更常问的是:

  • 什么是多态

  • 虚函数是怎么实现的

  • vtable 和 vptr 是什么

  • override 有什么作用

  • 纯虚函数和抽象类是什么

  • 为什么基类析构函数一般要写成 virtual

  • 构造函数和析构函数里调用虚函数会发生什么

这篇文章就把多态、虚函数、vtable、vptr、override、纯虚函数、抽象类这些高频点系统梳理一遍,适合面试前快速过一遍。


一 什么是多态

多态,简单理解就是:

同样的函数调用,因为对象实际类型不同,表现出不同的行为。

比如都调用draw()

  • 如果对象是圆形,就画圆

  • 如果对象是矩形,就画矩形

这就是多态。

在 C++ 里,多态主要分两类:

1 编译时多态

也叫静态多态,常见形式有:

  • 函数重载

  • 运算符重载

  • 模板

它在编译阶段就已经确定要调用哪个函数。

2 运行时多态

也叫动态多态,主要依靠:

  • 继承

  • 虚函数

  • 基类指针或引用调用派生类对象

面试里通常说的“多态”,大多指的就是运行时多态

面试怎么说

可以直接回答:

多态就是同一个接口在不同对象上表现出不同的行为。
C++ 里分编译时多态和运行时多态,面试里常说的多态一般指运行时多态,它通过虚函数配合继承和基类指针/引用来实现。


二 运行时多态成立的条件

不是只要有继承就一定有多态,运行时多态成立一般要满足三个条件

1 存在继承关系

派生类继承基类。

2 基类函数被声明为 virtual

代表这个函数是虚函数。

3 通过基类指针或基类引用调用

这是最容易被忽略的点。

看代码:

#include <iostream> using namespace std; class Base { public: virtual void show() { cout << "Base::show" << endl; } }; class Derived : public Base { public: void show() override { cout << "Derived::show" << endl; } }; int main() { Derived d; Base* p = &d; p->show(); // 输出 Derived::show return 0; }

这里就是典型的运行时多态。

易错点

如果不是通过基类指针/引用调用,而是直接对象调用,那就不是这里说的运行时多态。

比如:

Derived d; d.show();

这只是普通成员函数调用。

面试怎么说

可以直接背:

运行时多态的条件一般是三点:有继承、有虚函数、通过基类指针或引用调用派生类对象。少一个,通常都不能形成真正的运行时多态。


三 什么是虚函数

虚函数就是在基类中用virtual修饰的成员函数。

它的作用是:

允许派生类重写这个函数,并在通过基类指针或引用调用时,运行时决定到底执行基类版本还是派生类版本。

示例:

#include <iostream> using namespace std; class Animal { public: virtual void speak() { cout << "Animal speak" << endl; } }; class Dog : public Animal { p
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 18:20:11

吉利i-HEV智擎混动技术发布,重新定义新一代油电混动

4月13日&#xff0c;吉利汽车集团正式发布全球新一代AI油电混动技术方案——i-HEV智擎混动&#xff0c;以“五大颠覆”技术革新&#xff0c;重构油电混动出行体验&#xff0c;树立全球油混技术新标杆。该技术在吉利全域AI 2.0技术赋能下&#xff0c;深度融合全球顶尖的动力系统…

作者头像 李华
网站建设 2026/4/14 18:18:39

Dism++:Windows系统终极优化与维护完整指南

Dism&#xff1a;Windows系统终极优化与维护完整指南 【免费下载链接】Dism-Multi-language Dism Multi-language Support & BUG Report 项目地址: https://gitcode.com/gh_mirrors/di/Dism-Multi-language 你是否曾经为Windows系统运行缓慢而烦恼&#xff1f;是否因…

作者头像 李华
网站建设 2026/4/14 18:17:41

思路的打开: 缩微车模,不一定要求轻便。

简 介&#xff1a; 本文围绕智能车竞赛"缩微胖美人"组别的规则优化展开讨论&#xff0c;多位参赛者提出了改进建议&#xff1a;1&#xff09;建议增加尺寸限制以突出迷你车模特色&#xff1b;2&#xff09;提出将重量与成绩脱钩&#xff0c;单独设立"薄如蝉翼&q…

作者头像 李华
网站建设 2026/4/14 18:16:30

K8s 蓝绿发布生产级实战指南(零宕机 + 秒级回滚)

官方文档&#xff1a;https://argo-rollouts.readthedocs.io/en/stable/ 一、核心原理与生产架构 1. 核心原理 蓝环境&#xff08;Blue&#xff09; 当前承载 100% 生产流量的稳定旧版本。 绿环境&#xff08;Green&#xff09; 部署完成、验证通过的新版本&#xff0c;初始…

作者头像 李华
网站建设 2026/4/14 18:14:49

山东大学软件学院创新实训(一)

一、引言与个人职责由于初始项目的定位较为简单&#xff0c;经过小组成员的商讨后&#xff0c;我们对项目的功能进行了细化和创新&#xff0c;从而推出更具智能且个性化的考研助手。通过了协商任务后&#xff0c;小组讨论确认了项目初始的架构以及进一步的分工。其中我负责AI后…

作者头像 李华