中科合迅 软件开发-C++ 一面

1、类和 struct 的区别

答案:在 C++ 里,classstruct 本质上都可以定义成员变量、成员函数、构造函数、析构函数、继承关系,语法能力基本一致。最核心的区别只有两个:

第一,默认访问权限不同。class 默认是 privatestruct 默认是 public

第二,默认继承权限不同。class 默认私有继承,struct 默认公有继承。

所以从语言能力上说,两者差别不大,更多是代码风格和语义习惯不同。通常把偏数据聚合、对外开放字段较多的类型写成 struct,把需要封装和约束访问控制的类型写成 class

代码:

#include <iostream>
using namespace std;

struct A {
    int x;          // 默认 public
    void print() {
        cout << x << endl;
    }
};

class B {
    int x;          // 默认 private
public:
    B(int v) : x(v) {}
    void print() {
        cout << x << endl;
    }
};

int main() {
    A a{10};
    a.print();

    B b(20);
    b.print();
}

2、structunion 的区别

答案:struct 的每个成员都有自己独立的存储空间,一个对象里所有成员可以同时存在。union 的所有成员共用同一块内存,同一时刻通常只适合使用其中一个成员,修改一个成员往往会覆盖另一个成员的内容。

所以 struct 更像是把多个字段组合起来描述一个对象,union 更像是同一份内存的多种解释方式。union 常见在协议解析、底层内存布局控制、节省空间的场景里使用,但用的时候要特别注意当前活跃成员到底是谁。

代码:

#include <iostream>
using namespace std;

struct S {
    int a;
    char b;
};

union U {
    int a;
    char b;
};

int main() {
    cout << sizeof(S) << endl;
    cout << sizeof(U) << endl;

    U u;
    u.a = 0x12345678;
    cout << hex << u.b << endl;
}

3、C++11 常用新特性有哪些

答案:C++11 比较常用的内容主要有这些:auto、范围 for、右值引用、移动语义、完美转发、nullptrlambda 表达式、smart pointerthreadmutex、原子类型、constexproverride/final、统一初始化和 unordered_map 等。

如果放到工程里,使用频率最高的一般还是几类:一类是语言层面的 autonullptr、范围 forlambda,能明显改善代码可读性;一类是资源管理相关的 unique_ptrshared_ptr、移动语义,能减少手写内存管理错误;还有一类是并发编程支持,比如线程库、互斥锁、条件变量、原子操作。

代码:

#include <iostream>
#include <memory>
#include <vector>
using namespace std;

int main() {
    vector<int> nums = {1, 2, 3, 4};

    for (auto x : nums) {
        cout << x << " ";
    }
    cout << endl;

    auto p = make_unique<int>(42);
    cout << *p << endl;

    auto f = [](int a, int b) { return a + b; };
    cout << f(3, 4) << endl;
}

4、介绍一下你做过的项目架构

答案:我做过一个 基于 C++17 / ASIO / protobuf / LevelDB 的分布式配置中心客户端。这个项目的目标是给多个业务模块提供统一的配置拉取、版本管理和本地缓存能力,支持动态更新和故障回退。

整体架构分成四层。最底层是网络通信层,负责和配置服务端保持长连接,接收配置变更事件;上面一层是协议编解码层,负责 protobuf 消息解析和版本校验;再往上是配置管理层,负责

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

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

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

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

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