【c++八股文】

文章目录

0 准备

0.0 八股文参考csdn

uioiopio

0.1 优快云如何导出为pdf文档?

jfiefjijei

2/4 多态

多态
在这里插入图片描述

<width="1%">

2.1 C++ 堆区,栈区,数据段,bss段,代码区

link

8 左值引用和指针的区别

很明显
在这里插入图片描述

10 智能指针(shared_ptr、unique_ptr、weak_ptr)

link

  1. shared_ptr
    shared_ptr允许多个对象指向同一个对象,是一个标准的共享所有权的智能指针
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  2. unique_ptr
    两个unique_ptr 不能指向一个对象,即 unique_ptr 不共享它所管理的对象;

  3. weak_ptr
    weak_ptr 是为了配合 shared_ptr 而引入的一种智能指针,它更像是 shared_ptr 的一个助手而不是智能指针;
    weak_ptr 只对 shared_ptr 进行引用,而不改变其引用计数,当被观察的 shared_ptr 失效后,相应的 weak_ptr 也相应失效。

10.1 C++ 深拷贝与浅拷贝

linsfdsk
在这里插入图片描述

10.2 C++构造函数的各种用法

linkkk
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.3 C++类的拷贝构造函数

lincccc
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10.4 C++中引用

ciojief
其格式为:类型 &引用变量名 = 已定义过的变量名.
在这里插入图片描述
在这里插入图片描述

17 struct和class相互继承时,默认的继承方式

fkljeifjiejf
在这里插入图片描述

18 内存对齐

在这里插入图片描述

19 进程之间的通信方式

在这里插入图片描述
参考
fjoiejfoiejoifej

19.1 管道/匿名管道(pipe)

<
### C++ 面试题常见考点总结 C++ 是一种功能强大且灵活的编程语言,其面试题通常围绕 STL、指针与引用、运算符重载、继承与多态等核心概念展开。以下是 C++ 常见面试题的总结及关键点: #### 1. C++ 标准模板库 (STL) STL 是 C++ 标准模板库的缩写,作为 C++ 标准库的一部分,提供了通用的模板类和函数[^1]。它主要包括以下四个组件: - **容器**:如 `vector`、`list`、`map` 等,用于存储和管理数据。 - **算法**:如 `sort`、`find`、`copy` 等,用于操作容器中的元素。 - **迭代器**:用于访问容器中的元素,类似于指针。 - **函数对象**:也称仿函数,可以像函数一样调用。 示例代码展示如何使用 STL 的容器和算法: ```cpp #include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> vec = {3, 1, 4, 1, 5}; std::sort(vec.begin(), vec.end()); // 使用 STL 算法对容器进行排序 for (const auto& num : vec) { std::cout << num << " "; } return 0; } ``` #### 2. 运算符 `i++` 和 `++i` `i++` 和 `++i` 是 C++ 中常见的递增操作符。`i++` 返回的是 `i` 的原始值,而 `++i` 返回的是递增后的值[^2]。此外,`++i` 是一个左值,可以直接参与赋值或其他操作,而 `i++` 则是一个右值,不能直接修改。 示例代码展示两者的区别: ```cpp #include <iostream> int main() { int i = 5; std::cout << i++ << std::endl; // 输出 5,i 变为 6 std::cout << ++i << std::endl; // 输出 7,i 变为 7 return 0; } ``` #### 3. 引用与指针的区别 引用和指针是 C++ 中重要的概念,两者的主要区别包括: - 引用必须在声明时初始化,且不可更改指向的对象;指针可以在任何时候改变指向的对象[^3]。 - 引用不存在指向空值的情况,而指针可以指向空值(即 `nullptr`)。 - 引用本质上是变量的别名,不分配额外的存储空间;指针则需要分配存储空间以保存地址。 示例代码展示引用和指针的使用: ```cpp #include <iostream> void modifyValue(int &ref) { ref = 10; // 修改引用实际上修改了原始变量 } int main() { int a = 5; int *ptr = &a; // 指针初始化 int &ref = a; // 引用初始化 modifyValue(ref); // 使用引用修改变量 std::cout << "a: " << a << std::endl; // 输出 10 *ptr = 20; // 使用指针修改变量 std::cout << "a: " << a << std::endl; // 输出 20 return 0; } ``` #### 4. 逻辑运算符 `&&`/`||` 与 `&`/`|` 在 C++ 中,`&&` 和 `||` 是短路逻辑运算符,而 `&` 和 `|` 是位运算符。虽然某些情况下可以用 `&` 替代 `&&` 或用 `|` 替代 `||`,但这种替换可能导致逻辑错误。例如,当两个操作数分别为 `1` 和 `2` 时,`1 && 2` 的结果为 `true`,而 `1 & 2` 的结果为 `0`。 #### 5. 继承与多态 C++ 支持单继承和多继承,通过虚函数实现多态性。虚函数允许派生类重写基类的函数,从而实现动态绑定。 示例代码展示虚函数的使用: ```cpp #include <iostream> class Base { public: virtual void display() { std::cout << "Base class" << std::endl; } }; class Derived : public Base { public: void display() override { std::cout << "Derived class" << std::endl; } }; int main() { Base *basePtr = new Derived(); basePtr->display(); // 调用 Derived 类的 display 函数 delete basePtr; return 0; } ``` #### 6. 内存管理 C++ 中需要手动管理内存,涉及 `new` 和 `delete` 的使用。智能指针(如 `std::unique_ptr` 和 `std::shared_ptr`)可以简化内存管理并减少资源泄漏的风险。 示例代码展示智能指针的使用: ```cpp #include <iostream> #include <memory> int main() { std::unique_ptr<int> ptr(new int(10)); std::cout << *ptr << std::endl; // 输出 10 return 0; } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值