
C++学习
文章平均质量分 59
记录C++的学习笔记嘞~
ReCclay
优快云认证博客专家、优快云万粉博主、优快云嵌入式领域优质创作者、优快云-2020博客之星年度总评选Top25。自入站以来,凭借坚持与热爱,以博文的方式分享所学,累计博文数量达1千余篇,受益人次达300w+次,涉及领域包括但不限于前/后端软件开发、嵌入式软件开发、Linux驱动开发、自动驾驶算法研究、视觉SLAM算法研究、ROS机器人开发、FPGA开发、IC设计与验证等。欢迎您的关注,我们一起进步!
展开
-
【C++快速上手】番外篇二、知识点总结(持续更新...)
重载和多态的区别重载是同名参数不同,通过参数来确定调用那个函数;多态是同名同参数,通过函数的实际类型决定调用那个函数。默认情况下,在类中定义的所有项目都是私有的。类根据访问权限总结出不同的访问类型多继承多继承即一个子类可以有多个父类,它继承了多个父类的特性。C++ 类可以从多个类继承成员,语法如下:class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…{<派生类类体>};原创 2020-08-16 14:54:06 · 311 阅读 · 0 评论 -
C++ std::thread join() 与 detach 的理解
c++的join函数理解~转载 2022-03-18 22:06:39 · 362 阅读 · 0 评论 -
【C++快速上手】二十三、C++ 容器【待更】
参考STL容器去重,Vector、list等C++ STL容器的使用方法(vector、queue、list、set、map)C++ 序列式容器总结原创 2021-12-06 15:04:32 · 1111 阅读 · 0 评论 -
【C++快速上手】二十二、C++11 多线程【待更】
文章目录一、进程与线程二、多线程参考一、进程与线程进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位。进程和线程的提出极大地提高了操作系统的性能。进程让操作系统的并发性成为了可能,而线程让进程的内部并发成为了可能。二、多线程C++ 11之前,C++语言并没有提供支持,想要开发多线程程序就要借助于操作系统提供的多线程接口,但是,这样并不能开发跨平台可移植的并发程序,C++11提供了多线程语言支撑,使得程序的可移植性大大提升。参考面试官:兄弟,说说进程和线程的区别吧?进程和线程的原创 2021-12-06 11:14:04 · 1108 阅读 · 0 评论 -
【C++快速上手】二十一、初始化列表与赋值 学习笔记(待更)
参考初始化列表与赋值原创 2021-03-08 11:57:43 · 267 阅读 · 0 评论 -
【C++快速上手】二十、explicit(显式)关键字学习笔记(待完善)
explicit 修饰构造函数时,可以防止隐式转换和复制初始化explicit 修饰转换函数时,可以防止隐式转换,但按语境转换除外参考explicit(显式)关键字那些事原创 2021-03-08 11:51:36 · 330 阅读 · 1 评论 -
【C++快速上手】十九、typedef函数指针 与 assert学习笔记
一、typedef 函数指针1.1、简单的函数指针的应用形式1:返回类型(*函数名)(参数表)char (*pFun)(int); char glFun(int a){ return;} void main() { pFun = glFun; (*pFun)(2); }解释:第一行定义了一个指针变量pFun。首先我们根据前面提到的“形式1”认识到它是一个指向某种函数的指针,这种函数参数是一个int型,返回值是char类型。只有第一句我们还无法使用这个指针,因为我们还原创 2021-03-08 11:45:50 · 242 阅读 · 0 评论 -
【C++快速上手】十八、类构造函数 & 析构函数(总结)
一、构造函数1.1、基础构造函数类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。下面的实例有助于更好地理解构造函数的概念:#include <iostream> using namespace std; class Line{ public: void setLength( double len ); d原创 2021-02-26 17:48:23 · 306 阅读 · 0 评论 -
【C++快速上手】十七、类访问修饰符(总结)
序言数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员。类成员的访问限制是通过在类主体内部对各个区域标记 public、private、protected 来指定的。关键字 public、private、protected 称为访问修饰符。一个类可以有多个 public、protected 或 private 标记区域。每个标记区域在下一个标记区域开始之前或者在遇到类主体结束右括号之前都是有效的。类中成员(变量、函数)的默认访问修饰符是 private。一、公有(public)原创 2021-02-26 16:05:51 · 251 阅读 · 0 评论 -
【C++快速上手】十六、继承、重载和多态(总结)
一、继承继承:依据另一个类来定义一个类,已有的类称为基类,新建的类称为派生类,我更习惯叫父类和子类。有如下几个方面描述继承:访问权限:子类可以访问父类中所有的非私有成员。也就是说如果父类成员不想被子类的成员函数访问,则应在父类中声明为private。继承方式:同样分为public、private、protected,通常情况下都是使用public来继承。多继承:就是一个子类可以有多个父类,可以继承多个父类的属性。示例代码:#include <iostream>using nam原创 2021-02-26 15:17:08 · 854 阅读 · 0 评论 -
【C++快速上手】十五、域作用符 ::
一、域作用符分类1、全局作用域符(::name):用于类型名称(类、类成员、成员函数、变量等)前,表示作用域为全局命名空间2、类作用域符(class::name):用于表示指定类型的作用域范围是具体某个类的3、命名空间作用域符(namespace::name):用于表示指定类型的作用域范围是具体某个命名空间的二、配合代码消化理解下面代码主要用来理解一下 全局作用域符(::name)和 类作用域符(class::name)。#include <iostream>using nam原创 2021-02-25 15:50:12 · 1364 阅读 · 0 评论 -
【C++快速上手】十四、C++模板深入学习
一、模板的概念对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y);{return(x>y)?x:y ;}//函数2.float max( float x,float y){return (x>y)? x:y ;}//函数3.double max(double x,double原创 2021-02-25 14:37:35 · 369 阅读 · 0 评论 -
【C++快速上手】十三、extern学习笔记
总结在C语言的头文件中,对其外部函数只能指定为extern类型,C语言中不支持extern "C"声明,在.c文件中包含了extern "C"时会出现编译语法错误。所以使用extern "C"全部都放在于cpp程序相关文件或其头文件中。1、C++与C编译区别在C++中常在头文件见到extern "C"修饰函数,那有什么作用呢? 是用于C++链接在C语言模块中定义的函数。C++虽然兼容C,但C++文件中函数编译后生成的符号与C语言生成的不同。因为C++支持函数重载,C++函数编译后生成的符号带有原创 2020-08-18 19:54:28 · 270 阅读 · 0 评论 -
【C++快速上手】十二、位域学习笔记
总结位域在内存中的布局是与机器有关的位域的类型必须是整型或枚举类型,带符号类型中的位域的行为将因具体实现而定取地址运算符(&)不能作用于位域,任何指针都无法指向类的位域1、位域(Bit field)是什么?“ 位域 “ 或 “ 位段 “(Bit field)为一种数据结构,可以把数据以位的形式紧凑的储存,并允许程序员对此结构的位进行操作。这种数据结构的一个好处是它可以使数据单元节省储存空间,当程序需要成千上万个数据单元时,这种方法就显得尤为重要。第二个好处是位段可以很方便的访问一个整原创 2020-08-17 17:45:17 · 825 阅读 · 2 评论 -
【C++快速上手】十一、assert学习笔记
总结断言,是宏,而非函数忽略断言,在代码开头加上:#define NDEBUG1、第一个断言案例断言,是宏,而非函数。assert 宏的原型定义在 (C)、(C++)中,其作用是如果它的条件返回错误,则终止程序执行。可以通过定义 NDEBUG 来关闭 assert,但是需要在源代码的开头,include 之前。#include <stdio.h>#include <assert.h>int main(){ int x = 7; /* 中间的原创 2020-08-17 17:28:29 · 382 阅读 · 0 评论 -
【C++快速上手】十、volatile学习笔记
总结volatile 关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素(操作系统、硬件、其它线程等)更改。所以使用 volatile 告诉编译器不应对这样的对象进行优化。volatile 关键字声明的变量,每次访问时都必须从内存中取出值(没有被 volatile 修饰的变量,可能由于编译器的优化,从 CPU 寄存器中取值)const 可以是 volatile (如只读的状态寄存器)指针可以是 volatile1、volatile被 volatile 修饰的变量,在对原创 2020-08-17 17:22:22 · 437 阅读 · 0 评论 -
【C++快速上手】九、virtual学习笔记
结论虚函数的调用取决于指向或者引用的对象的类型,而不是指针或者引用自身的类型。默认参数是静态绑定的,虚函数是动态绑定的。 默认参数的使用需要看指针或者引用本身的类型,而不是对象的类型。1、虚函数与运行多态虚函数的调用取决于指向或者引用的对象的类型,而不是指针或者引用自身的类型。#include<iostream>using namespace std;class Employee{public: virtual void raiseSalary() {原创 2020-08-17 16:56:59 · 520 阅读 · 0 评论 -
【C++快速上手】八、C++虚函数的vptr与vtable学习笔记
结论C++的动态多态性是通过虚函数来实现的;为了实现虚函数,C ++使用一种称为虚拟表的特殊形式的后期绑定每个使用虚函数的类(或者从使用虚函数的类派生)都有自己的虚拟表(vtable)编译器还会添加一个隐藏指向基类的指针,我们称之为vptr类指针调用函数通常使用->操作符;引用调用函数通常使用.操作符。两种实例与调用函数的方法通过指针:Base *pt = new Derived();,调用时通常是:pt->fun1();这样的形式直接实例:Base base,调用时通常是:p原创 2020-08-17 15:51:22 · 486 阅读 · 0 评论 -
【C++快速上手】七、纯虚函数和抽象类学习笔记
总结纯虚函数(或抽象函数)是我们没有实现的虚函数!我们只需声明它,通过声明中赋值0来声明纯虚函数!纯虚函数:没有函数体的虚函数;抽象类:包含纯虚函数的类,不能创建对象。抽象类只能作为基类来派生新类使用,不能创建抽象类的对象,可以创建抽象类的指针和引用。抽象类中:在成员函数内可以调用纯虚函数,在构造函数/析构函数内部不能使用纯虚函数。如果一个类从抽象类派生而来,它必须实现了基类中的所有纯虚函数,才能成为非抽象类。重要点纯虚函数使一个类变成抽象类抽象类类型的指针和引用如果我们不原创 2020-08-17 11:51:28 · 364 阅读 · 0 评论 -
【C++快速上手】六、sizeof学习笔记
总结原则1:空类的大小为1字节原则2:一个类中,虚函数本身、成员函数(包括静态与非静态)和静态数据成员都是不占用类对象的存储空间。原则3:对于包含虚函数的类,不管有多少个虚函数,只有一个虚指针vptr的大小。原则4:普通继承和派生类继承了所有基类的函数与成员,要按照字节对齐来计算大小原则5:虚函数继承,不管是单继承还是多继承,都是继承了基类的vptr。(32位操作系统4字节,64位操作系统 8字节)!原则6:虚继承,继承基类的vptr原则1:空类的大小为1字节#include<io原创 2020-08-17 10:57:28 · 312 阅读 · 0 评论 -
【C++快速上手】五、inline学习笔记
结论inline要起作用,inline要与函数定义放在一起,inline是一种“用于实现的关键字,而不是用于声明的关键字”内联能提高函数效率,但并不是所有的函数都定义成内联函数!内联是以代码膨胀(复制)为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。如果代码执行开销大于函数调用开销,那么这个时候不宜使用内联。1、类中内联头文件中声明方法class A{public: void f1(int x); /** * @brief 类中定义了的函数是隐式内原创 2020-08-17 10:27:18 · 309 阅读 · 0 评论 -
【C++快速上手】四、this指针学习笔记
结论this在成员函数的开始执行前构造,在成员的执行结束后清除。类的成员默认是private,而结构是public1、this指针的作用python中的self类比到C++中就是this指针,this指针的用处如下:(1)一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。(2)this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译原创 2020-08-17 10:15:05 · 295 阅读 · 0 评论 -
【C++快速上手】三、static学习笔记
结论类中的静态变量由对象共享。对于不同的对象,不能有相同静态变量的多个副本。也是因为这个原因,静态变量不能使用构造函数初始化。当与不同类型一起使用时,Static关键字具有不同的含义,常用的用法有以下两种:1、静态变量:函数中的变量,类中的变量2、静态类的成员(静态成员):类对象和类中的函数1、静态变量1.1、函数中的静态变量当变量声明为static时,空间将在程序的生命周期内分配。即使多次调用该函数,静态变量的空间也只分配一次,前一次调用中的变量值通过下一次函数调用传递。这对于在C原创 2020-08-17 09:36:48 · 385 阅读 · 0 评论 -
【C++快速上手】二、const学习笔记
结论未被const修饰的变量不需要extern显式声明,而const常量需要显式声明extern!const修饰的变量必须初始化!const *表示指针指向为常量,* const表示指针本身是常量!1、const含义常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。这里的对象是广义的对象,不单单指类的对象。比如int a = 3,此处a也可以称为对象,通常将之称之为普通对象。2、const作用2.1、可以定义常量const int a=100;原创 2020-08-16 16:01:34 · 545 阅读 · 0 评论 -
【C++快速上手】一、CLion环境搭建,HelloWorld初探(windows10 + Ubuntu)
MinGW,Cygwin是什么?什么区别?一、下载安装CLion前往JET BRAINS官网下载CLion下载完毕后的安装包,如下图所示。双击安装包,依次按照如下步骤进行安装二、下载MinGW,配置CLion前往MinGW下载主页,点击下图所示选项,进行下载D:\CLionEnvironment\mingw64其余路径会自动检测输出结果如下...原创 2020-08-11 13:06:06 · 2086 阅读 · 0 评论 -
【C++快速上手】番外篇一、Tip of the day in CLion(持续更新...)
记录CLion的一些Tips!原创 2020-08-11 13:05:01 · 394 阅读 · 0 评论