从C高级到征服C++
文章平均质量分 92
本专栏将会和大家分享从C到学习C++的一些知识
小嵌同学
这个作者很懒,什么都没留下…
展开
-
C++版设计模式简介 与 初识 工厂模式
关于并发编程的更多内容我会在后续的实际开发中进行总结,然后分享给大家!接下来将会和大家一起学习C++的设计模式😷(1)设计模式 是 软件开发人员在软件开发过程中 面临的一般问题的解决方案。(2)这些解决方案是众多软件开发人员经过 相当长的一段时间的 试验 和 错误总结出来的。(3)使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。原创 2024-08-18 21:24:27 · 884 阅读 · 0 评论 -
C语言:va_xx、getopt_xx、str_xx等函数
在C语言学习过程中,有些函数并不会怎么见,但是在工作以后经常会见到和使用。今天在这里和大家简单介绍一下。原创 2024-01-14 20:12:42 · 963 阅读 · 0 评论 -
Linux 栈回溯
日常工作中,我们在开发软件程序时,经常会遇到程序奔溃的问题,导致程序奔溃的原因有很多,我们一般都是定位到相关代码,再去查询具体原因。而定位到bug相关代码往往需要依赖栈回溯这个功能,知道程序是在哪里挂掉的。在Linux系统中,栈回溯(stack trace)是用于跟踪程序执行期间函数调用的一种技术,记录了程序在出现错误或异常时,从当前位置开始追溯回到程序的执行起点,包括每个函数的调用关系和相应的返回地址。栈回溯可以帮助开发人员快速定位问题所在。原创 2023-11-28 00:16:58 · 1695 阅读 · 0 评论 -
JSON入门与简单使用
这几天工作中需要了解json的基本使用,所以抽时间在网上找了点资料学习了一下,这里进行简单总结,和大家分享一下。JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) , JS 对象简单数据格式 JSON 是轻量级的文本数据交换格式, JSON 是存储和交换文本信息的语法,类似 XML。JSON 独立于语言: JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。原创 2023-02-20 00:19:02 · 964 阅读 · 1 评论 -
Linux 程序开发 之 库打桩机制
Linux 链接器支持一个很强大的技术,称为库打桩(library interpositioning),它允许你截获对共享库函数的调用,取而代之执行自己的代码。使用打桩机制,你可以追踪对某个特殊库函数的调用次数,验证和追踪它的输入和输出值,或者甚至把它替换成一个完全不同的实现。基本思想:给定一个需要打桩的目标函数,创建一个包装函数,它的原型与目标函数完全一样。使用某种特殊的打桩机制,你就可以欺骗系统调用包装函数而不是目标函数了。原创 2022-12-12 00:44:42 · 1661 阅读 · 0 评论 -
C++并发编程
(1)内核和应用 在Linux程序开发中,涉及到了许多的并发操作,根据程序的上下层关系可分为两部分,一部分是在内核中,即操作系统本身的在运行过程中就包含有大量的并发操作,如硬件驱动程序和内存管理以及进程调度模块就在同时运行着;另一部分就是我们经常说的应用程序,运行在linux系统之上的程序,如一个服务器应用程序,同时存在两个线程在运行,一个负责监听客户端,一个负责处理客户端的请求;(2)进程和线程 进程是系统进行资源分配的基本单位,线程是CPU进行调度的基本单位。一个进程中包含多个线程。有关于进程线原创 2022-12-06 23:52:27 · 1324 阅读 · 0 评论 -
C++中的断言机制与gtest单元测试
C++,gtest测试框架(1)测试是对软件的功能、可靠性、兼容性等要求所做的检验(2)测试有多种分类和概念,譬如白盒和黑盒,自动化测试等白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件,白盒指的是盒子是可视的,即清楚盒子内部的东西以及里面是如何运作的。"白盒" 法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒" 法是穷举路径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。原创 2022-10-30 15:39:17 · 2302 阅读 · 2 评论 -
C++编程功底和常用规则
本文章不建议C++小白阅读,否则你无法理解其中的一些精髓,一些属于C++独有的语法知识。掌握代码规范在日常开发中尤为重要,这是一个软件程序员的基本素养!(1)代码简洁精炼,美观,可读性好;(2)高效率;如深拷贝与浅拷贝,C++拷贝函数(传值和传引用),++i 比 i++效率高(i++在运算过程中使用了临时变量)(3)高复用,可移植性好;可以跨平台/操作系统(4)高内聚,低耦合;(5)没有冗余;代码注释简洁易懂,无多余废话。代码无多余无用语句,逻辑清晰简洁。(6)规范性,代码有规可循;原创 2022-10-21 00:03:46 · 1093 阅读 · 0 评论 -
C++编程之内存分区模型
前言 在之前的C高级专栏中,我讲述过内存的概念以及程序的各个部分分布在内存的那块,不过那是基于C进行讲解的。但是在 C++中略有不同,体现在内存区域的划分与名称,但本质上与C区别不大。1 、内存分区模型C++程序在执行时,将内存大方向划分为4个区域代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量以及常量栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收内存四区意义:不同区域存放原创 2022-04-17 22:08:02 · 284 阅读 · 0 评论 -
智能指针与STL查漏补缺(2)
目录一、CPP11最常用的智能指针shared_ptr1、shared_ptr的设计思路2、shared_ptr的基本使用二、shared_ptr的引用计数详解1、引用计数的获取和检测2、引用计数实现智能指针的总结3、shared_ptr的其他细节三、weak_ptr与shared_ptr的关联和使用四、迭代器适配器五、function封装器和可变参数模版1、function封装器2、可变参数模版3、C++系列文章前3部分总结一、CPP11最常用的智能指针shared_ptr1、shared_ptr的设原创 2022-02-03 22:29:49 · 884 阅读 · 0 评论 -
智能指针与STL查漏补缺(1)
目录一、智能指针的本质原理1、为什么需要智能指针2、智能指针的本质工作原理3、智能指针演示代码实战4、总结二、auto_ptr的使用1、auto_ptr的常规使用2、auto_ptr的成员方法3、auto_ptr的弊端三、unique_ptr的使用之构造函数四、unique_ptr的其他成员详解1、修改器2、观察器3、元素访问4、非成员函数五、unique_ptr的对比和总结1、unique_ptr比auto_ptr的优势2、unique_ptr的不足和使用注意事项3、unique_ptr总结一、智能指针原创 2022-02-02 22:45:08 · 857 阅读 · 1 评论 -
STL的其他容器讲解(2)
目录一、有序关联容器map1、map介绍2、pair3、map的构造函数详解4、其他方法二、multi_set和multi_map1、multi_版本的差异2、multi_set实战演示3、multi_map实战演示三、无序关联容器1、无序关联容器和有序关联容器的相同点2、无序关联容器和有序关联容器的差异点3、无序关联容器初步使用四、哈希函数和桶1、什么是哈希函数2、哈希冲突及其解决五、unordered_map中桶相关的方法一、有序关联容器map1、map介绍(1)map和set类似,但是map是(原创 2022-01-31 22:53:51 · 1111 阅读 · 0 评论 -
STL的其他容器讲解(1)
目录一、STL的三种容器适配器1、什么是容器适配器2、为什么会有容器适配器3、总结二、容器适配器stack详解1、stack的构造2、stack的操作函数3、stack元素查询4、栈和栈操作三、queue和priority_queue详解1、queue2、priority_queue四、有序关联容器set1、什么是有序关联容器2、set的基本使用五、set的遍历和原地构造1、set的三种遍历方法2、set的原地构造六、移动构造和emplace_hint1、移动构造函数2、emplace_hint七、set的原创 2022-01-28 14:44:47 · 2492 阅读 · 0 评论 -
模板特化与类型萃取(2)
目录一、类型萃取的目的和意义1、类型萃取是用途2、为什么要区分POD类型和非POD类型二、类型萃取实战演练1、使用is_pod解决上面的问题2、std提供的其他类型萃取三、类型萃取是如何实现的1、一种可能的实现2、使用类模板的特化实现四、类型萃取的另一种可能实现1、不使用静态成员变量2、改为使用成员函数3、使用typedef增加一层中间层五、迭代器萃取与泛型算法1、STL的核心2、泛型算法实现的难题和解法六、迭代器萃取器的设计解读七、迭代器萃取器的特化1、萃取器的特化讲解2、本章节文章总结一、类型萃取的目原创 2022-01-20 23:46:39 · 706 阅读 · 0 评论 -
模板特化与类型萃取(1)
目录一、从案例中理解什么是模板特化1、通过一个案例理解模板特化2、模板特化总结二、偏特化和全特化1、全特化与偏特化概念2、函数模板的全特化3、类模板的全特化三、类模板的多种偏特化1、类模板的第一种偏特化2、类模板的第二种偏特化3、类模板的第三种偏特化4、类模板的第4种偏特化四、函数模板为什么不能偏特化1、事实2、分析深度原因五、编译器匹配规则和特化的总结1、编译器匹配规则2、特化与递归结合3、特化的最后总结一、从案例中理解什么是模板特化1、通过一个案例理解模板特化(1)案例前奏:写一个swap函数库,原创 2022-01-18 01:12:11 · 688 阅读 · 0 评论 -
STL的泛型算法使用详解(2)
目录一、CPP之lamba表达式1、实践体会lamba表达式2、lambda表达式总结3、lambda表达式格式二、lambda表达式之参数捕获1、什么是参数捕获2、lambda表达式的捕获列表3、lambda表达式总结三、CPP函数适配器1、什么是函数适配器2、C++的函数适配器3、bind的学习四、STL典型泛型算法解读1、for_each和transform2、再看几个泛型算法2、泛型算法总结一、CPP之lamba表达式1、实践体会lamba表达式(1)lambda表达式使用举例:if (st原创 2022-01-15 21:46:11 · 443 阅读 · 0 评论 -
STL的泛型算法使用详解(1)
目录一、什么是泛型算法1、从容器说起2、泛型算法使用基础二、泛型算法使用实战1、泛型算法和容器迭代器的适配2、泛型算法使用举例三、谓词predicate和函数对象引入1、何为谓词2、函数对象引入3、函数对象案例实践四、函数对象的一些细节1、STL中定义的函数对象的分析2、自定义函数对象用于STL算法库3、函数对象的优势五、STL典型泛型算法解读一、什么是泛型算法1、从容器说起(1)容器是数据结构,是对数据的封装(2)各容器都提供了少量处理元素操作的方法,譬如sort,但没有提供更多(3)同样的操作原创 2022-01-14 01:26:00 · 554 阅读 · 0 评论 -
STL的容器类和迭代器(2)
目录一、迭代器的几个细节问题1、const与非const2、begin和end的半开半闭区间3、正向和逆向迭代器4、迭代器越界会怎么样二、STL的不同类型迭代器1、C++17前共有5种迭代器2、C++17新增1种迭代器3、STL的6种迭代器总结4、C++20的新迭代器三、序列容器之Vector1、Vector的特征2、构造拷贝和赋值3、容器元素的遍历四、序列容器之list五、序列容器之deque一、迭代器的几个细节问题1、const与非const(1)begin和end返回可读可写的迭代器,而cbeg原创 2022-01-12 22:49:15 · 623 阅读 · 0 评论 -
STL的容器类和迭代器(1)
目录一、STL的容器类介绍1、何为容器2、STL有哪些容器类3、容器类如何学习二、容器类array的初步使用1、array的特性2、array的学习方法3、array的构造和初始化4、array的元素访问5、array的容量设置和获取6、操作7、非成员函数8、辅助类tuple_size9、辅助类tuple_element10、被取代的make_array一、STL的容器类介绍1、何为容器(1)顾名思义,容器就是盛放东西的东西,这里被盛放的一般是数据对象,用来盛放的是容器类(2)计算机中一切皆是数据,原创 2022-01-09 17:48:53 · 1246 阅读 · 0 评论 -
C++模板编程入门(2)
目录一、模板类的继承1、模板类继承的多种情况(常见的)2、类模板继承类模板3、多模板参数4、类模板 继承 模板类5、类模板 继承 普通类6、普通类 继承 模板类二、非类型模板参数和模板类型推导1、非类型模版参数2、模板的本质3、类型推导的隐式类型转换4、模板和库一、模板类的继承1、模板类继承的多种情况(常见的)类模板:类中用到了模板模板类:(1)类模板 继承 类模板(2)类模板 继承 模板类(3)类模板 继承 普通类(4)普通类 继承 模板类2、类模板继承类模板(1)单模板参数,类模板继原创 2022-01-05 00:16:25 · 798 阅读 · 0 评论 -
C++模板编程入门(1)
目录一、一个案例引入模板1、模板和泛型编程系类文章介绍2、案例和传统解决方案3、传统方案的缺点4、解决办法思考与模板引入二、模板的理解和几个细节1、模板是一种编译时的多态2、模板有什么用3、模板的几个小细节三、函数模板和类模板1、模板分2种2、类模板举例四、多模板参数的类模板1、同类型多参数2、不同类型多参数3、成员函数在类内部的模板类五、模板友元函数1、友元函数参数中不带模板的情况2、友元函数参数中带模板参数方法13、友元函数参数中带模板参数方法2六、模板运算符重载函数七、模板友元运算符重载实现1、+作为原创 2022-01-03 19:47:52 · 873 阅读 · 0 评论 -
C++的友元函数和友元类 与 类的杂散问题
目录一、什么是友元函数1、外部函数访问类内成员2、友元函数的引入3、总结二、友元函数的2种实现1、友元函数的2种实现2、类的前置声明3、总结三、友元类1、友元类的概念和使用2、互为友元类3、友元类总结四、为什么会有友元函数1、使用友元函数的优缺点2、使用友元函数的两种情况3、运算符重载中使用友元回顾4、两个类如何共享数据5、友元函数和类的成员函数的区别6、共有友元函数五、嵌套类和局部类1、嵌套类2、局部类3、总结六、数值与对象互转1、数值与对象概念2、C++中数值与对象互转3、对象数组一、什么是友元函数原创 2021-12-30 23:02:38 · 498 阅读 · 0 评论 -
C++的静态类和静态成员
目录一、类的静态成员1、static关键字2、什么是静态成员3、静态成员的特征和实践验证二、静态成员的深度理解1、静态数据成员的使用2、静态成员和普通成员的互相调用规则3、从内存角度出发三、静态成员的用途1、用途举例2、静态成员与面向对象四、静态类的扩展讲解1、什么是静态类2、静态类的优势3、C++不支持静态类一、类的静态成员1、static关键字(1)static,C语言中有2种用法:static修饰局部变量和全局变量,含义完全不同(2)static,C++中扩展了第3种用法:静态类、静态成员,含原创 2021-12-27 18:48:37 · 5889 阅读 · 1 评论 -
C++的运算符重载(2)
目录一、赋值运算符重载函数返回引用1、返回引用好处1:提升程序效率2、返回引用好处2:允许连续赋值式3、思考:传参为什么要传引用二、String类的赋值运算符重载1、标准库中String类的运算符重载2、String的=运算符重载演练3、总结三、++和--运算符的前置后置如何实现1、可前置可后置的运算符2、如何重载++和3、总结四、两种运算符重载方法1、并非所有运算符都支持重载2、并非只有一种方式实现重载3、如何选择两种运算符重载一、赋值运算符重载函数返回引用1、返回引用好处1:提升程序效率(1)赋值原创 2021-12-25 17:49:01 · 716 阅读 · 0 评论 -
C++的运算符重载(1)
目录一、运算符重载引入1、从函数重载说起2、什么是运算符重载3、运算符重载示例二、深度理解运算符重载1、运算符重载的本质2、运算符重载的意义3、运算符重载如何学习三、理解运算符重载的关键点1、理解运算符重载机制的两部曲2、通过代码实践来深度理解运算符重载函数3、运算符=的默认提供问题4、+=运算符5、总结四、运算符重载函数中的细节1、赋值运算符重载与拷贝构造函数2、赋值运算符重载函数参数中的const3、避免赋值运算符中的自赋值一、运算符重载引入1、从函数重载说起(1)函数重载是在一定作用域内,多个相原创 2021-12-21 21:58:38 · 733 阅读 · 0 评论 -
C++继承和多态特性——多态特性与虚函数
目录一、多态和虚函数1、通过案例学多态2、什么是多态3、多态中的override4、多态一定要通过面向对象和override来实现吗?5、对比重载、重定义、重写三个概念二、纯虚函数与抽象类1、纯虚函数2、抽象类(abstract type)3、接口(interface)三、虚析构函数1、什么是虚析构函数2、为什么需要虚析构函数3、分析和总结四、using重新定义继承时访问权限1、using关键字 在非public继承时的 权限重开作用3、C++继承和多态特性总结一、多态和虚函数1、通过案例学多态(1)原创 2021-12-20 21:56:45 · 974 阅读 · 0 评论 -
C++继承和多态特性——继承详解(2)
目录一、派生类和基类的构造析构关系1、派生类并不继承基类的构造和析构函数,只继承成员变量和普通成员方法2、派生类的构造函数一定会调用基类的构造函数,析构也一样3、为什么派生类的构造(析构)必须调用基类的某个构造(析构)4、其他几个细节5、派生类做的三件事二、派生类和基类的同名成员问题1、派生类中再实现一个基类中的方法会怎样2、派生类中如何访问被隐藏的基类方法3、注意和总结三、子类和父类的类型兼容规则1、何为类型兼容规则2、类型兼容规则的常见情况及演示3、总结四、继承的优势与不良继承1、为什么会有继承2、何为原创 2021-12-19 21:51:44 · 982 阅读 · 0 评论 -
C++继承和多态特性——继承详解(1)
目录一、什么是面向对象的继承特性1、类的继承案例2、什么是继承3、继承特性是天然的二、C++继承中的权限管控一、什么是面向对象的继承特性1、类的继承案例(1)基类为:person,派生类为man,所有权限均为public(2)演示:派生类“继承”了基类的成员变量、成员方法,共包含5个文件,main.cpp、man.cpp、man.hpp、person.cpp、person.hpp在这里插入代码片(3)C++类的继承语法如下:class 派生类名:访问控制 基类名1,访问控制 基类名2,访问控原创 2021-12-13 17:57:39 · 1107 阅读 · 0 评论 -
C++的封装和访问权限
目录一、典型的C++面向对象编程二、C++的构造函数和析构函数三、在构造和析构函数中使用动态内存四、构造函数与类的成员初始化五、拷贝构造函数的引入六、浅拷贝与深拷贝七、什么是访问权限问题八、C++为什么要设计访问权限九、访问权限带来的一些新编程理念十、struct和class的区别十一·、const和mutable是干嘛的一、典型的C++面向对象编程1、基本组成(1)头文件hpp中类的定义(2)源文件cpp中类的实现(构造函数、析构函数、方法)(3)主程序2、案例(1)用C++来编程“人一天的原创 2021-09-08 23:08:15 · 263 阅读 · 0 评论 -
C++和面向对象——会C语言就能学会面向对象
2.1.1.从高处看面向对象2.1.1.1、面向对象是一种编程思想(1)面向对象并不是C++特有的,所有编程语言都可以面向对象(2)面向对象语言就是设计语言特性时充分考虑并且原生支持面向对象特征的那些编程语言(3)面向对象之于编程,就好像比喻修辞法之于写作(4)面向对象只是编程语言语法层面的东西,不影响最终生成的二进制程序,也不关CPU的事儿(5)深度装x:面向对象是一种哲学2.1.1.2、面向对象并不是一个单一概念(1)面向对象三大特征:封装、继承、多态(2)面向对象还会延伸出很多细节,原创 2021-09-05 22:49:32 · 706 阅读 · 0 评论 -
从C到C++——C++的内存管理
目录一、为什么要研究内存管理二、C++可用内存区域三、new和malloc的区别四、智能指针的引入五、Java的垃圾回收机制一、为什么要研究内存管理1、程序就是数据加算法(1)写程序是为了解决某个问题,生活中的问题最终被计算机抽象为控制或运算(2)CPU中的主要构件就是运算器和控制器,本质上是一堆组合逻辑电路,表现为机器指令集(3)一个问题对应一个程序,一个程序分为多个函数,一个函数分为多个机器指令(4)存储机器指令需要内存(ROM),机器指令的执行过程需要内存(RAM)参与,这是内存的2大作用原创 2021-08-25 10:43:31 · 172 阅读 · 0 评论 -
从C到C++——C++新增和有变化的关键字
目录1.4.1.本课程介绍和bool关键字1.4.1.1、本课程介绍(1)研究编程语言从关键字出发不适合学习,但是适合查漏补缺(2)C++全部关键字列表查阅(3)C++关键字相对C有几种情况:新增关键字、新增语义、语义变化、完全无变化(4)限于面向对象和STL没学,因此本课程不追求全面讲解关键字,重点是从一些核心关键字出发学习C++语法特性,体会C++与C的不同,熟悉C++。1.4.1.2、C++的bool关键字(1)bool类型也叫逻辑类型,是个2值enum,值为true或false(这2原创 2021-08-24 21:52:10 · 746 阅读 · 0 评论 -
从C到C++——C++基本编程体验
目录一、何为命名空间二、namespace的初级定义和使用三、C++默认命名空间四、C++匿名命名空间(没有名字的namespace)五、嵌套命名空间六、C++标准库介绍七、iostream的cout使用八、iostream的cin使用九、C++用fstream读写文件十、C++字符串string类使用一、何为命名空间1、命名空间的引入(1)命名空间namespace,是C++引入的一种解决全局变量和函数名(其是全局的)冲突的机制(2)C语言没有namespace,但是C++及之后的java pyt原创 2021-08-23 17:52:23 · 492 阅读 · 0 评论 -
从C到C++——C++开发环境搭建
目录一、如何选择合适的开发环境二、常用C++开发环境介绍三、Linux命令行下C++编程初体验四、Linux下使用cmake管理C++工程五、Windows下qtcreator安装和使用六、使用qtcreator开发纯C++项目七、Linux下qtcreator安装和使用一、如何选择合适的开发环境1、选择IDE的考量因素(1)是否能用(满足需求),是否可用(能拿到),是否好用(顺手舒服)(2)是否可跨平台(3)是否需要版权和付费(4)目标项目是大项目还是小项目2、选择IDE的策略(1)学习时原创 2021-08-23 15:44:09 · 571 阅读 · 0 评论 -
从C到C++——为什么会有C++这门语言
目录目录一、为什么要学习C++二、为什么有了C还需要C++三、C++究竟是个怎样的语言四、C++的典型项目和优势领域五、C++程序员发展前景分析目录许多人在学习过C语言后或者在学习C语言时都听说过C++这门语言,许多人对这门语言都十分好奇,今天这篇文章就向大家简单介绍一下这门语言。一、为什么要学习C++1、C++很重要。C/C++不分家,面试开发都需要2、为继续学习opencv、qt、android等打基础3、基于C高级,进一步提升自己大脑复杂度,建立面向对象和泛型等概念二、为什么有了C还需要原创 2021-08-22 16:34:59 · 682 阅读 · 1 评论