4.3k 4 分钟

# i、基本概念 # 继承关系中的构造函数 在 C++ 的继承关系中,派生类的构造函数必须在其初始化列表中调用基类的构造函数来构造基类部分。 在派生类的构造函数中,构造基类部分的步骤是隐式的,但必须确保基类的构造函数被正确调用,以初始化基类的成员。这是因为派生类不仅包含自己的成员,还继承了基类的成员,这些成员需要在构造过程中得到适当的初始化。 构造函数调用基类构造函数的方式是在派生类构造函数的初始化列表中使用基类的构造函数,并提供适当的参数。 以下是一个示例: 123456789101112131415161718192021222324252627class Base...
6.7k 6 分钟

# 一、概述 C++ 中的多态性(Polymorphism)是面向对象编程的一个关键概念,它允许对象以不同的方式呈现相同的接口。C++ 中的多态性可以分为静态多态性(静态多态)和动态多态性(动态多态),它们有不同的实现方式和特点: # 1、静态多态性(静态多态) 静态多态性是在编译时(编译期间)解析的多态性,也称为编译时多态性。它是通过函数的重载和运算符重载来实现的。 在静态多态性中,编译器在编译时根据函数参数的类型和数量来确定调用哪个函数或运算符。 例如,函数重载允许你定义多个具有相同名称但不同参数列表的函数,编译器会根据调用时的参数类型来选择正确的函数。 1234567void...
2.8k 3 分钟

# i、const 和 constexpr 的区别 提问:const 和 constexpr 有什么区别? 回答: const 和 constexpr 都用于创建常量,但它们之间有一些重要的区别。 以下是它们的区别以及如何使用它们: const: const 用于创建只读的常量变量,其值在运行时不能被修改。 const 变量必须在声明时初始化,并且可以在运行时计算其值。 const 变量可以用于任何数据类型,包括基本数据类型、自定义类、指针等。 const 变量的值在编译时或运行时(如果它是一个函数的局部变量)计算。 const...
25k 23 分钟

记录一些刷题、学习过程中接触到的一些库函数,后续(应该会)持续更新。 # i、std::function #CPP 新特性 #CPP11 std::function 是 C++11 标准引入的一个功能强大的模板类,它用于包装和管理可调用对象,包括函数指针、函数对象、Lambda 表达式和成员函数指针等。 std::function 允许你以统一的方式存储和调用不同类型的可调用对象。 以下是 std::function 的一些重要特性和用法: 1、创建 std::function 对象:你可以使用 std::function 模板来创建一个对象,该对象可以存储可调用对象,如函数指针、Lambda...
6.3k 6 分钟

# i、文件流构建字符串 123std::ostringstream oss;oss << v.major << "." << v.minor << "." << v.patch;string str = oss.str(); # i、文件流分割字符串: 1234567//对于给定的以空格分割的字符串“A boy is standing outside”string...
7.4k 7 分钟

本文用以记录工作过程中 C++ 踩到的一些坑。 # 1、成员函数指针与普通函数指针不同 成员函数需要一个额外的参数(指向类实例的指针 this ),因此不能直接将成员函数传递给普通的函数指针参数。 1234567class OtherClass {public: typedef function<int(int, int)> callbacktype; void registerCallBack(callbacktype cb) { cout << "test: "...
20k 18 分钟

# 一、Intro 完全无任何线程同步措施,线程会相互竞争打断,本例中,线程 A 的操作无法保证完整性: 123456789101112131415161718void ThreadA() { while(1) { { std::cout << "===============================" << std::endl; std::cout << "Thread A: do...
15k 13 分钟

智能指针是 C++ 中用于管理动态分配的对象生命周期的一种特殊指针。它们提供了自动内存管理和资源释放的机制,避免了手动调用 delete 来释放内存的麻烦和潜在的内存泄漏。 C++ 标准库提供了两种常用的智能指针: std::shared_ptr 和 std::unique_ptr 。 (其实还有 std::weak_ptr ,用于破解循环引用的问题) std::shared_ptr :它是一种共享所有权的智能指针。多个 std::shared_ptr 对象可以同时拥有同一个对象的所有权。它使用引用计数的方式来跟踪对象的引用次数。当最后一个 std::shared_ptr...
4.3k 4 分钟

# 1、结构化绑定 #CPP 新特性 #CPP17 C++17 引入了一项非常强大的特性,称为结构化绑定(Structured Bindings),它允许你将复杂的数据结构(如 std::tuple 、数组或用户定义的类型)的成员绑定到命名变量,从而使代码更加清晰和易于理解。结构化绑定的主要目的是让代码更加直观,减少手动提取和命名数据的需要。 以下是结构化绑定的主要特点和用法: 自动解包:结构化绑定允许您将数据结构中的元素自动解包到单独的变量中,而无需手动提取元素。 更具可读性:通过为数据结构的各个成员指定名称,代码变得更加自解释和可读。 适用于多种数据结构:结构化绑定不仅适用于 STL...
1.6k 1 分钟

“提高效率最有效的办法,并不是那些让你更自律的手段,而是搭建一个系统,让你这个任务的产出成果,能够复用到下一个任务中,并且将其沉淀为资产,为你带来复利”。 去年在即刻上看到即友关于利用 Obsidian 搭建个人知识体系的介绍,再加上之前看到别的即友也聊到过一些关于 “建立系统复用产出” 的观点,受到了启发,于是自己结合 Obsidian 和 Git 搭建了自己的 PKM(Personal Knowledge Management)。从去年七月中旬(2023.07)开始,把自己以前写的笔记都归纳整理到一起,统一管理和维护。 一下子就打开了我的新世界。 本文从个人体验出发,就 Obsidian...