
C++那些事儿
参考https://github.com/Light-City/CPlusPlusThings对C++基础知识进行整理
Tech沉思录
这个作者很懒,什么都没留下…
展开
-
C++ static关键字
static原创 2022-07-29 17:47:45 · 351 阅读 · 0 评论 -
g++编译宏使用
目录C++类中的权限编译宏使用C++类中的权限在C++中private成员函数只能在类内使用,是不对外开放的public成员函数,既能在类内使用,又能在类外使用private成员只能在类内使用编译宏使用#include<iostream>#include <vector>#include <algorithm>#include <istream>#include <string>#include <sstream&原创 2021-06-19 16:38:25 · 1217 阅读 · 2 评论 -
宏
目录宏那些事1.宏中包含特殊符号1.1 字符串化操作符(#)1.2 符号连接操作符(##)1.3 续行操作符(\)1.4 完整例子2.do{...}while(0)的使用2.1 避免语义曲解2.2避免使用goto控制流2.3 避免由宏引起的警告2.4 定义单一的函数块来完成复杂的操作宏那些事1.宏中包含特殊符号分为几种:#,##,\1.1 字符串化操作符(#)在一个宏中的参数前面使用一个#,预处理器会把这个参数转换为一个字符数组,换言之就是:#是“字符串化”的意思,出现在宏定义中的#是把跟在后面的原创 2020-08-28 22:42:50 · 217 阅读 · 0 评论 -
指针+引用
目录引用与指针那些事1.引用与指针2.引用左值引用右值引用引用折叠3.指针与引用的性能差距3.总结引用与指针那些事1.引用与指针总论:引用指针必须初始化可以不初始化不能为空可以为空不能更换目标可以更换目标引用必须初始化,而指针可以不初始化。我们在定义一个引用的时候必须为其指定一个初始值,但是指针却不需要。int &r; //不合法,没有初始化引用int *p; //合法,但p为野指针,使用需要小心引用不能为空,而指针可以原创 2020-08-28 22:41:30 · 402 阅读 · 0 评论 -
friend友元
目录友元函数与友元类0.概述1.友元函数2.友元类3.注意友元函数与友元类0.概述友元提供了一种 普通函数或者类成员函数 访问另一个类中的私有或保护成员 的机制。也就是说有两种形式的友元:(1)友元函数:普通函数对一个访问某个类中的私有或保护成员。(2)友元类:类A中的成员函数访问类B中的私有或保护成员优点:提高了程序的运行效率。缺点:破坏了类的封装性和数据的透明性。总结:能访问私有成员破坏封装性友元关系不可传递友元关系的单向性友元声明的形式及数量不受限制1.友元函数在类声原创 2020-08-28 22:38:52 · 359 阅读 · 0 评论 -
C和C++中的struct
目录一文搞懂C和C++中struct1.C中struct2.C++中struct3.总结C和C++中的Struct区别C++中的struct和class的区别一文搞懂C和C++中struct1.C中struct在C中struct只单纯的用作数据的复合类型,也就是说,在结构体声明中只能将数据成员放在里面,而不能将函数放在里面。在C结构体声明中不能使用C++访问修饰符,如:public、protected、private 而在C++中可以使用。在C中定义结构体变量,如果使用了下面定义必须加struc原创 2020-08-28 22:37:51 · 4579 阅读 · 0 评论 -
extern
目录extern "C"1.C++与C编译区别2.C++调用C函数2.C中调用C++函数extern “C”1.C++与C编译区别在C++中常在头文件见到extern "C"修饰函数,那有什么作用呢? 是用于C++链接在C语言模块中定义的函数。C++虽然兼容C,但C++文件中函数编译后生成的符号与C语言生成的不同。因为C++支持函数重载,C++函数编译后生成的符号带有函数参数类型的信息,而C则没有。例如int add(int a, int b)函数经过C++编译器生成.o文件后,add会变成形如a原创 2020-08-28 22:08:54 · 178 阅读 · 0 评论 -
assert
assert那些事1.第一个断言案例断言,是宏,而非函数。assert 宏的原型定义在 <assert.h>(C)、(C++)中。其作用是如果它的条件返回错误,则终止程序执行。可以通过定义 NDEBUG 来关闭 assert,但是需要在源代码的开头,include <assert.h> 之前。void assert(int expression);#include <stdio.h> #include <assert.h> int main原创 2020-08-28 22:07:21 · 165 阅读 · 0 评论 -
About_virtual
目录virtual那些事1.虚函数与运行多态2.vptr与vtable3.虚函数中默认参数4.可以不可以5.RTTI与dynamic_cast6.纯虚函数和抽象类virtual那些事1.虚函数与运行多态对应的代码:emp.cpp虚函数的调用取决于指向或者引用的对象的类型,而不是指针或者引用自身的类型。2.vptr与vtable多态是如何体现的?每个含有虚函数的类都有一个虚函数表,在实例化的时候,内存区域的第一块就是存放的该虚函数表的地址,当该对象调用虚函数时,就去虚函数表中查找。3.虚函转载 2020-08-24 21:51:28 · 167 阅读 · 0 评论 -
纯虚函数和抽象类
纯虚函数和抽象类注意:多态实现的关键是虚函数表。(每一个有虚函数的类,在该类对象的内存的第一块就是存放的虚函数表的地址)在使用基类指针指向派生类对象时,需要将基类的析构函数添加virtual关键字,将其变为虚析构函数。(否则在删除基类指针指向的额派生类对象时,只会调用基类的析构函数,会造成内存泄漏)在抽象类的成员函数内部可以调用纯虚函数(多态),而在构造和析构函数内部不能调用纯虚函数(非多态,抽象类中的该函数无函数体,不可调用)1.纯虚函数与抽象类C++中的纯虚函数(或抽象函数)原创 2020-08-22 12:36:31 · 1354 阅读 · 0 评论 -
sizeof
目录类大小计算1.原则12.原则23.原则34.原则4与55.原则6类大小计算首先来个总结,然后下面给出实际例子,实战!空类的大小为1字节Byte(8bit)一个类中,虚函数本身、成员函数(包括静态与非静态)和静态数据成员都是不占用类对象的存储空间。对于包含虚函数的类,不管有多少个虚函数,只有一个虚指针,vptr的大小。普通继承,派生类继承了所有基类的函数与成员,要按照字节对齐(以读取速度来换取空间的方式)来计算大小虚函数继承,不管是单继承还是多继承,都是继承了基类的vptr。(32位操作系原创 2020-08-22 12:35:36 · 139 阅读 · 0 评论 -
this指针那些事儿
目录this指针那些事1.this指针this指针那些事1.this指针相信在坐的很多人,都在学Python,对于Python来说有self,类比到C++中就是this指针,那么下面一起来深入分析this指针在类中的使用!首先来谈谈this指针的用处:(1)一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。(2)this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写原创 2020-08-22 12:34:47 · 203 阅读 · 0 评论 -
inline那些事儿
目录inline那些事1.类中内联2.虚函数(virtual)可以是内联函数(inline)吗?inline那些事1.类中内联头文件中声明方法class A{public: void f1(int x); /** * @brief 类中定义了的函数是隐式内联函数,声明要想成为内联函数,必须在实现处(定义处)加inline关键字。 * * @param x * @param y */ void Foo(int x,in转载 2020-08-22 12:33:04 · 233 阅读 · 0 评论 -
static那些事儿
static那些事当与不同类型一起使用时,Static关键字具有不同的含义。我们可以使用static关键字:静态变量: 函数中的变量,类中的变量静态类的成员: 类对象和类中的函数现在让我们详细看一下静态的这些用法:静态变量函数中的静态变量当变量声明为static时,空间将在程序的生命周期内分配。即使多次调用该函数,静态变量的空间也只分配一次,前一次调用中的变量值通过下一次函数调用传递。这对于在C / C ++或需要存储先前函数状态的任何其他应用程序非常有用。#include <io原创 2020-08-21 10:45:37 · 231 阅读 · 0 评论 -
const那些事儿
目录1、const含义2、const作用3、const对象默认为文件局部变量4、定义常量4、指针与const6、函数中使用const7、类中使用const1、const含义常类型是指使用类型修饰符const说明的类型,是只读的(不能更新),这意味着需要在定义的时候就要赋初值。2、const作用定义常量const int a=100;注意:要记得在定义的时候赋值(初始化)类型检查const是定义的变量,是有数据类型的,而define定义的对象没有数据类型,所以编译器对前者进行安全检查原创 2020-08-20 21:05:46 · 219 阅读 · 0 评论