米哈游 客户端开发-C++ 一面
1. C++ 里的多态是什么?编译期多态和运行时多态有什么区别?
多态可以理解为“同一个接口,不同实现”。 编译期多态在编译阶段确定调用目标,常见形式是函数重载、模板;运行时多态在程序运行时根据对象真实类型决定调用目标,依赖虚函数机制。
#include <iostream>
using namespace std;
struct Base {
virtual void foo() { cout << "Base\n"; }
};
struct Derived : Base {
void foo() override { cout << "Derived\n"; }
};
void func(int) { cout << "int\n"; }
void func(double) { cout << "double\n"; }
template <typename T>
void tfunc(T) { cout << "template\n"; }
int main() {
Base* p = new Derived();
p->foo(); // 运行时多态
func(1); // 编译期多态(重载)
tfunc(3.14); // 编译期多态(模板)
delete p;
}
如果你也学C++ , 可能你需要一份完整的C++ 面试题: C++ 常考面试题总结
2. 重写和重载有什么区别?
重写发生在继承关系中,子类重写父类的虚函数,函数签名要匹配。 重载发生在同一作用域,函数名相同但参数列表不同。
struct Base {
virtual void f(int) {}
};
struct Derived : Base {
void f(int) override {} // 重写
void f(double) {} // 重载
};
3. 什么是虚函数?纯虚函数和虚函数有什么区别?
虚函数用于支持运行时多态。 纯虚函数写成 =0,用于定义接口;含纯虚函数的类是抽象类,不能直接实例化。
struct Shape {
virtual double area() = 0;
virtual ~Shape() = default;
};
struct Circle : Shape {
double r;
explicit Circle(double rr) : r(rr) {}
double area() override { return 3.14159 * r * r; }
};
4. 说说 C++ 的 RAII
RAII 的核心是:资源由对象管理。 对象创建时获取资源,对象销毁时自动释放资源。常用于锁、文件句柄、堆内存管理,能有效减少泄漏问题。
#include <mutex>
std::mutex mtx;
void safeFunc() {
std::lock_guard<std::mutex> lk(mtx); // 离开作用域自动解锁
}
5. unique_ptr、shared_ptr、weak_ptr 区别是什么?
unique_ptr 独占所有权,不能拷贝,可以移动。 shared_ptr 共享所有权,使用引用计数。 weak_ptr 不参与引用计数,常用于解决循环引用。
#include <memory>
using namespace std;
struct Node {
shared_ptr<Node> next;
weak_ptr<Node> prev;
};
6. new/delete 和 malloc/free 的区别?
new/delete 是 C++ 运算符,会调用构造和析构。 malloc/free 是 C 库函数,只做内存分配和释放,不负责对象生命周期。
7. C++ 的 move 语义是什么?
move 语义通过右值引用转移资源所有权,减少不必要的深拷贝,提高性能。 常用 std::move 把左值显式转换为右值引用。
#include <vector>
#include <string>
using namespace std;
int main() {
string s = "hello";
vector<string> v;
v.push_back(std::move(s));
}
8. C++ 内存分区有哪些?
常见有:代码区、全局/静态区、常量区、栈区、堆区。 栈由系统自动管理;堆通常由程序动态申请和释放。
9. 什么是哈希表?
哈希表通过哈希函数把键映射到桶位置,实现平均 O(1) 的查找、插入和删除。 冲突处理常用链地址法或开放定址法,装载因子高时会扩容。
10. 哈希表中键值能不能是一个对象?要满足什么条件?
可以。通常需要: 1) 可比较相等; 2) 可计算哈希值; 3) 作为 key 使用期间,影响哈希/相等判断的
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.

查看19道真题和解析