
【C++入门到实践教程】
C++入门到进阶教程(必看教程)
嵌入式职场
在Matlab、Python、C/C++和Go等多种编程语言方面都有丰富的经验,专注于智能优化算法、工业人机交互界面设计、物联网、服务端开发等众多领域。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【C++设计模式】创建型模式—多线程下的懒汉式单例模式
通过将构造函数声明为私有,可以防止外部代码直接实例化 Singleton 类,只能通过。:如果需要在程序结束时销毁 Singleton 实例,需要在合适的地方加入对。:通过互斥锁确保在多线程环境下只有一个线程可以创建实例,避免竞态条件。都需要获取互斥锁,可能会对性能产生一定影响,特别是在高并发场景下。方法时才会创建 Singleton 实例,节省了资源。是静态指针,用于存储单例对象的实例;:虽然保证了线程安全,但每次调用。的删除操作,并确保线程安全。是用于线程同步的互斥锁。原创 2024-08-02 15:50:15 · 488 阅读 · 0 评论 -
【C++设计模式】创建型模式—简单工厂模式
在C++中,简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,其主要目的是通过一个工厂类,根据参数的不同来创建不同类的对象。简单工厂模式并不属于23种经典设计模式之一,但它是许多其他创建型模式的基础,例如工厂方法模式和抽象工厂模式。原创 2024-08-03 10:33:32 · 203 阅读 · 0 评论 -
【C++设计模式】创建型模式—懒汉式单例模式
懒汉式单例是单例模式的一种实现方式,它的特点是在首次被引用时才会进行实例化。与之相对的是饿汉式单例,在程序启动时就立即创建并初始化,无论是否会用到。:实例化过程是在第一次调用获取实例的方法时进行,而不是在程序加载时就完成。:提供一个公有的静态方法,用于获取单例实例。在该方法内部进行实例化操作。:通过将构造函数私有化,确保其他类无法直接实例化该类。:使用一个静态私有成员变量来保存单例实例。原创 2024-08-02 13:46:31 · 393 阅读 · 0 评论 -
【C++设计模式】懒汉式的双重检查(Double-Check),为什么需要两次检查呢?
懒汉式的双重检查(Double-Check)确实是一个经典的解决方案,特别是在多线程环境下保证单例模式的性能和线程安全性。为什么需要两次检查呢?原创 2024-08-03 08:55:48 · 604 阅读 · 0 评论 -
【C++设计模式】创建型模式—抽象工厂模式
目录抽象工厂模式抽象工厂模式(Abstract Factory Pattern)是一种创建型设计模式,它允许你创建一系列相关或相互依赖的对象,而无需指定它们具体的类。抽象工厂模式通过提供一个接口来创建一系列相关或依赖对象的家族,而不需要指定具体类。抽象工厂模式通常包含以下角色:抽象工厂(Abstract Factory):具体工厂(Concrete Factory):抽象产品(Abstract Product):具体产品(Concrete Product):抽象产品类 (, ):具体产品类 (, ,原创 2024-08-05 15:36:26 · 507 阅读 · 0 评论 -
【C++设计模式】创建型模式—饿汉式单例模式
饿汉式单例模式是一种常见的单例设计模式,其特点是在类加载时就创建并初始化单例对象,不管是否需要使用该单例对象。这种方式保证了在多线程环境下的线程安全性,因为实例在类加载时就已经创建好,不会存在多线程竞争条件。原创 2024-08-02 14:19:53 · 929 阅读 · 0 评论 -
【C++设计模式】创建型模式—工厂模式
目录工厂模式工厂模式的主要优势工厂模式的几种常见变体解析示例代码工厂模式(Factory Pattern)是一种创建型设计模式,旨在提供一种统一的方式来创建对象,而无需指定其具体类。它通过提供一个共同的接口来创建对象,这个接口的具体实现可以根据不同的需求返回不同类的对象实例。封装对象创建逻辑:工厂模式将对象的实例化过程集中在一个位置,客户端代码不需要直接实例化对象,从而降低了耦合度。简化对象替换:由于客户端代码仅依赖于工厂接口,如果需要更改创建的具体类,只需调整工厂的实现,而不需要修改客户端代码。支持多态性原创 2024-08-05 14:12:30 · 619 阅读 · 0 评论 -
【C++】虚析构函数的作用
/ 产品接口public:// 具体产品Apublic:int main()return 0;// 产品接口public:// 具体产品Apublic:int main()return 0;虚析构函数的主要作用是确保在使用多态时正确地释放对象的资源,是C++中重要的面向对象编程技术之一,特别是在基类指针指向派生类对象时更是必须的。原创 2024-08-03 10:21:07 · 287 阅读 · 0 评论 -
【C++】静态局部变量(Static Local Variables)
【C++】静态局部变量(Static Local Variables)原创 2024-08-02 10:46:39 · 308 阅读 · 0 评论 -
【C++】静态成员函数(Static Member Functions)
【代码】【C++】静态成员函数(Static Member Functions)原创 2024-08-02 10:26:43 · 291 阅读 · 0 评论 -
【C++】静态成员变量(Static Member Variables)
静态成员变量必须在类的定义外进行初始化。原创 2024-08-02 10:10:40 · 250 阅读 · 0 评论 -
【C++问题】 error: non-const static data member must be initialized out of line
目录1、遇到问题2、问题解决问题分析和解决方法:错误信息 意味着在你的类定义中,有一个静态数据成员声明,但它没有在类外进行初始化。在C++中,非常重要的一点是,非的静态成员变量必须在类的定义外部进行初始化。静态成员变量的定义和初始化:错误原因:解决方法:假设你有一个 类,在 文件中的声明如下:现在,在 文件中提供静态成员变量的定义和初始化:原创 2024-08-02 10:00:51 · 778 阅读 · 0 评论 -
【C++】详解 eventpp 中的 CallbackList
【C++】详解 eventpp 中的 CallbackList。原创 2024-02-02 11:02:20 · 482 阅读 · 0 评论 -
【C++】详解 eventpp 库
然而,如果事件种类很多,数百到无限(这在 GUI 或游戏系统中很常见),那么为每个事件使用 CallbackList 就太疯狂了。常见的解决方案是回调采用 Event 的基类,并且所有事件都从 Event 派生自己的事件数据。当事件种类很少时,CallbackList 是理想的选择。例如,如果一个线程正在调度一个事件,另一个线程同时删除了一个侦听器,则删除的侦听器在删除后可能仍然会被触发。在调度时,EventDispatcher 查找事件类型的 CallbackList,然后调用回调列表。原创 2024-02-02 09:29:33 · 1247 阅读 · 0 评论 -
解决 CLion 出现中文乱码问题【亲测有效】
目录1、出现问题编辑2、解决问题(1)第一步:(2)第二步: 最后成功解决问题: 发现出现乱码现象。出现这种问题说明是编码不正确,需要我们修改编码,具体操作如下: 选择三处位置都为:UTF-8原创 2021-09-04 15:43:22 · 1567 阅读 · 0 评论 -
【C++】详解 eventpp 事件调度程序和回调列表库
eventpp 是一个用于回调、事件调度程序和事件队列的C++事件库。使用 eventpp,您可以轻松实现信号和插槽机制、发布者和订阅者模式或观察者模式。wqking/eventpp:事件调度程序和C++回调列表 (github.com)原创 2022-11-29 15:50:24 · 2093 阅读 · 0 评论 -
【gdb调试】通过具体程序代码了解gdb调试命令
UNIX及UNIX-like下的调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具相比于VC、z的优点是具有修复网络断点以及恢复链接等功能,比BCB的图形化调试器有更强大的功能。所谓“尺有所短,寸有所长”就是这个道理。原创 2022-11-18 20:23:58 · 148 阅读 · 0 评论 -
【C++】第22篇 预处理 #ifdef、#ifndef、#if 使用方式
标识符”实质上等价。标识符”实质上等价。原创 2022-10-26 14:57:58 · 298 阅读 · 0 评论 -
【C++】第21篇 解决 error: undefined reference to `pthread_create‘
【C++】第21篇 解决 error: undefined reference to `pthread_create'原创 2022-10-18 10:08:36 · 454 阅读 · 0 评论 -
【C++】第20篇 超详细讲解 lambda 表达式
/ 定义全局变量int main(){// [] 不捕获任何变量// 全局变量可以在lambda函数体中使用};};return 0;}原创 2022-10-17 16:10:48 · 791 阅读 · 0 评论 -
【C++】第19篇 详解STL迭代器
目录1、迭代器示例提领操作符2、使用auto关键字示例 3、迭代器声明方式总结第一种:using std::vector第二种:using namespace std4、迭代器操作与逆向迭代器 // 成员函数begin()将迭代器定位到容器的第一个元素。 // 成员函数end()返回哨兵值,标志容器最后一个元素之后的位置。获得一个指针指向地址的实际值(这个值可修改)。我们得到了一个指针,但如果不能操作对应的数据,这个指针将毫无意义。提领的操作符是(前缀),这个操作符不仅能获得一个指针指向原创 2022-10-13 16:14:34 · 235 阅读 · 0 评论 -
【C++】第18篇 详解 C++ 链表
【C++】第18篇 详解 C++ 链表。原创 2022-10-13 11:40:17 · 239 阅读 · 0 评论 -
【C++】第17篇 详解C++中的友元函数 friend
友元函数定义类的外部,可以通过友元函数访问类中的私有变量与保护变量。友元函数可以是一个函数,也可以是一个类。原创 2022-10-13 10:14:40 · 396 阅读 · 0 评论 -
【C++】第16篇 详解结构化编程方式
结构化编程的方式,提高了代码的可读性。原创 2022-10-13 09:30:57 · 317 阅读 · 0 评论 -
【C++】第15篇 main函数参数详解
在C++程序运行时,首先是从main函数入手的。原创 2022-10-13 09:15:48 · 373 阅读 · 0 评论 -
【C++提高】一篇文章带你熟练学会 C++ 线程池
线程池中维护着多个线程,等待分配任务,可以去并发执行,可在避免短时间内创建销毁线程带来的时间成本。原创 2022-09-18 09:13:28 · 183 阅读 · 0 评论 -
【C++提高】继承中的类模板语法
子类从模板类继承的时候,需要让编译器知道 父类的数据类型具体是什么(数据类型的本质:固定大小内存块的别名)A从类模板派生到普通类模板。原创 2022-09-02 11:13:26 · 231 阅读 · 0 评论 -
【C++提高】单个类模板语法详解
有两个或者多个类功能相同,数据类型不同时,可以使用类模板。原创 2022-09-02 10:52:25 · 253 阅读 · 0 评论 -
【C++提高】函数重载遇到函数模板怎么处理?
可以看出当函数模板与普通函数在一起时,优先考虑普通函数。当函数模板产生一个更好的模板函数时,那么选择模板。函数模板可以像普通函数一样被重载。C++编译器优先考虑普通函数。原创 2022-09-02 09:10:39 · 320 阅读 · 0 评论 -
【C++提高】函数模板基础使用
两个int或double或float的数交换数值。此例就可以使用函数模板。函数类型与函数参数不具体指定。用一个虚拟的类型来代替。可以发现其值发生交换。原创 2022-09-01 17:00:01 · 111 阅读 · 0 评论 -
【C++设计模式】创建型模式 — 建造者模式
Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象。对象的创建:Builder模式是为对象的创建而设计的模式—创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象- 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。原创 2022-06-16 09:52:58 · 373 阅读 · 0 评论 -
【C++设计模式】创建型模式 — 单例模式
1、什么叫单例模式?单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。注意一下几点: 单例类只能由一个实例化对象。 单例类必须自己提供一个实例化对象。 单例类必须提供一个可以访问唯一实例化对象的接口。 单例模式分为懒汉和饿汉两种实现方式。懒汉:故名思义,不到万不得已就不会去实例化类,也就是说在第一次用到类实例的时候才会去实例化一个对象。在访问量较小,甚至可能不会去访问的情况下,...原创 2022-01-14 10:04:53 · 307 阅读 · 0 评论 -
【C++设计模式】创建型模式 — 工厂方法模式
目录1、工厂方法模式介绍职责与角色2、实例1、工厂方法模式介绍工厂方法模式同样属于类的创建型模式又被称为多态工厂模式 。工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不在负责产品的创建,成为一个抽象的工厂。其子工厂类要继承核心工厂类。职责与角色抽象工厂(Creator)角色工厂方法模式的核心,任何工厂类都必须实现这个接口。具体工厂( Concrete Creator)角色具体工厂类是抽象工厂的一个实现,负.原创 2022-05-18 10:12:45 · 147 阅读 · 0 评论 -
【C++设计模式】状态模式(State)
目录1、状态模式概念2、模块职责3、代码实现1、状态模式概念State模式也叫状态模式,是行为设计模式的一种。State模式允许通过改变对象的内部状态而改变对象的行为,这个对象表现得就好像修改了它的类一样。状态模式主要解决的是当控制一个对象状态转换的条件表达式过于复杂时的情况。把状态的判断逻辑转译到表现不同状态的一系列类当中,可以把复杂的判断逻辑简化。2、模块职责Context:用户对象拥有一个State类型的成员,以标识对象的当前状态;State:接原创 2022-05-16 10:29:58 · 675 阅读 · 0 评论 -
【C++实践】C++代码接口封装 — “父类声明纯虚函数”法
目录1、实现父类声明纯虚函数法 2、打包生成静态库.a,供开发者调用在代码的开发过程中,会遇到接口封装的问题,而把父类声明纯虚函数就是封装的一种方式;下面通过居体实例来了解接口封装:例如:封装两个接口函数,Add函数实现两个数相加,Sub实现两个数相减;首先定义父类纯虚函数接口:COperator.hCOperator.cpp子类继承父类实现虚拟接口方法: baseoperator.hbaseoperator.cppmain.cpp测试结果: 生成静态库如上。你只需原创 2022-06-14 14:04:54 · 1290 阅读 · 0 评论 -
【C++提高】const_cast<>() 去除变量的只读属性
const_cast, 字面上理解就是去const属性。原创 2022-06-15 10:05:03 · 323 阅读 · 0 评论 -
【C++提高】dynamic_cast 动态类型转换
dynamic_cast 命名上理解是动态类型转换。如子类和父类之间的多态类型转换。dynamic_cast(),动态类型转换,安全的基类和子类之间转换;运行时类型检查原创 2022-06-15 09:46:21 · 379 阅读 · 0 评论 -
【C++提高】reinterpreter_cast 重新解释类型
目录1、reinterpreter_cast 重新解释类型2、实践演练若不同类型之间,进行强制类型转换,用reinterpret_cast() 进行重新解释。C语言中不能隐式类型转换的,在c++中可以用 reinterpret_cast() 进行强行类型解释。...原创 2022-06-15 09:05:04 · 1695 阅读 · 0 评论 -
【C++提高】static_cast 静态类型转换
目录1、static_cast 静态类型转换 2、实例演练static_cast:静态类型转换。如int转换成char。static_cast() :静态类型转换,编译的时c++编译器会做类型检查;基本类型能转换 但是不能转换指针类型。静态的类型转换: 在编译的时 进行基本类型的转换 能替代c风格的类型转换 可以进行一部分检查。 注意:不可以转换指针类型C语言能隐式类型转换的,在c++中可以用 static_cast()进行类型转换 。C++编译器在编译检查一般都能通过。......原创 2022-06-15 08:51:31 · 4558 阅读 · 0 评论 -
【C++】第十四篇(基础)解决 error: unknown type name ‘uint32_t‘
添加头文件如下:成功解决!!!原创 2022-06-15 11:47:35 · 15054 阅读 · 3 评论