GeezerVisonThe World Wide Web, restored to 800 pixels of glory. |
| Home|About|Gaming cabinet|Archives|How it works|Starter sites |
GeezerVison is showing notes.kamacoder.com — C++三大特性:封装、继承、多态的核心概念与虚函数动态绑定机制 # C++三大特性:封装、继承、多态面试官问:"介绍一下 C++ 的三大特性。" 这题几乎每场 C++ 面试都会问,但答"封装继承多态"六个字肯定不够。面试官想听的是:每个特性解决什么问题、多态的底层怎么实现的、vtable 和 vptr 怎么配合工作。 # 简要回答封装:把数据和操作打包在类里,通过 继承:子类复用父类的属性和方法,在原有功能基础上扩展,避免重复代码。 多态:同一个接口,不同对象调用表现不同。分编译时多态(函数重载、模板)和运行时多态(虚函数 + 继承)。 # 详细回答封装 核心思想是"隐藏实现细节,暴露接口"。 继承 子类自动拥有父类的非私有成员,可以重写(override)父类方法来改变行为。比如定义 继承有三种方式: 多态 多态是三大特性中面试问得最深的。
运行时多态的底层机制:
vtable 是类级别的(同类所有对象共享一张表),vptr 是对象级别的(每个对象各有一个)。
# 知识拓展面试官可能追问: Q1: 编译时多态能替代运行时多态吗? 不完全能。编译时多态要求类型在编译期就确定,适合"类型已知但行为不同"的场景(比如模板)。运行时多态适合"类型运行时才确定"的场景(比如工厂模式返回基类指针)。如果类型编译期能确定又想避免虚函数开销,可以用 CRTP(奇异递归模板模式)模拟。 Q2: vtable 和 vptr 具体怎么工作的?
Q3: 不用虚函数能实现运行时多态吗? 能,但比较 hack。可以用函数指针成员、 评论验证登录状态... |
| You are visitor 01402520 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required. |