中望软件 一面凉经

1. C++ 的三大特性是什么?

C++ 面向对象三大特性是:封装、继承、多态。

  • 封装:把数据和操作放在类中,控制访问权限;
  • 继承:复用已有类能力,形成层次结构;
  • 多态:同一接口在不同对象上表现不同。 工程里三者通常结合使用:用封装控制边界,用继承表达“is-a”,用多态解耦调用方和实现方。

2. 菱形继承的缺点?如何解决?

菱形继承问题是:派生类通过两条路径继承同一个基类,会产生基类子对象重复、成员访问二义性、存储冗余等问题。 常见解决方案是虚继承(virtual inheritance),让中间层共享同一份基类子对象。

代码:

#include <iostream>
using namespace std;

struct A { int x = 1; };
struct B : virtual A {};
struct C : virtual A {};
struct D : B, C {};

int main() {
    D d;
    d.x = 42;          // 无二义性
    cout << d.x << endl;
    return 0;
}

3. 多态是什么?怎么实现的?

多态是“同一调用接口,不同对象有不同实现”。 C++ 里分两种:

  1. 编译期多态:函数重载、模板;
  2. 运行时多态:虚函数 + 基类指针/引用。 运行时多态底层依赖虚函数表(vtable)和虚表指针(vptr)进行动态绑定。

代码:

#include <iostream>
using namespace std;

class Base {
public:
    virtual void run() { cout << "Base\n"; }
    virtual ~Base() = default;
};

class Derived : public Base {
public:
    void run() override { cout << "Derived\n"; }
};

int main() {
    Base* p = new Derived();
    p->run();  // 动态绑定到 Derived::run
    delete p;
}

4. C++11 的新特性有哪些?

常见高频特性有:auto、nullptr、lambda、范围 for、override/final、右值引用和移动语义、智能指针、thread/mutex/atomic、unordered_map、chrono、std::function。 面试回答建议“特性 + 场景”一起说,比如:

  • 用 unique_ptr 管理资源,避免泄露;
  • 用 move 降低对象复制成本;
  • 用 atomic 实现轻量计数和状态标记。

5. 内存管理:请说明 C++ 程序内存分区

常见划分可概括为:

  • 代码区:程序机器指令;
  • 全局/静态区:全局变量、静态变量;
  • 堆区:动态分配(new/malloc);
  • 栈区:函数调用栈、局部变量;
  • 常量区:字符串字面量等只读数据。 实际工程更重要的是“对象生命周期”和“所有权”管理,而不是死记分

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++ 常考面试题总结 文章被收录于专栏

本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.

全部评论
凉的原因是啥啊
点赞 回复 分享
发布于 03-05 22:52 北京

相关推荐

评论
1
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务