- 博客(13)
- 资源 (1)
- 收藏
- 关注
原创 头文件包含顺序
头文件包含顺序原理:当通过#include指令包含另一个头文件时,编译预处理器用头文件的内容取代#include指令,也就是说,头文件的所有内容最终都会被合并到某一个或某几个源文件中,如此将每一个包含的头文件递归的展开后形成的源文件就叫编译单元。所以:实际上是只编译源文件源文件中在包含头文件的地方,将被包含头文件中的代码全部拷贝进去进行编译;包含头文件是有顺序的,因为包含头文件的顺序意味着该头文件在源文件进行展开的顺序。推荐顺序:C标准库、C++标准库、其它库的头文件、你自己工程的头文件。
2021-10-03 22:46:42 1336
原创 C++函数重载
重载的定义函数重载:多个函数拥有相同的名字,只要它们的参数列表不同即可。参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同。函数的重载的规则:函数名称必须相同。 参数列表必须不同(个数不同、类型不同、参数排列顺序不同等)。 函数的返回类型可以相同也可以不相同。 仅仅返回类型不同不足以成为函数的重载。重载、重写、重定义的区别重载:指的是在同一个作用域内,两函数的函数名可以相同,但是参数不能完全相同,至于返回值,不影响重载。重写:指的在
2021-04-20 19:34:27 508
原创 内存对齐
内存对齐:编译器将程序中的每个数据安排在合适的位置上,而不是连续地,可以在相当大的程度上提高程序性能。原理:计算机内存是以字节(Byte)为单位划分,实际情况中CPU不可任意访问某个字节。CPU 通过地址总线来访问内存,比如说32 位的 CPU 一次可以处理4个字节的数据,那么每次就从内存读取4个字节的数据;也就是说寻址的步长为4个字节,即只对编号为 4 的倍数的内存寻址。这样做可以快速寻址寻址,不遗漏,也不重复。若一个变量最好位于一个寻址步长的范围内,这样一次就可以读取到变量的值;如果跨步长存储,就需
2021-04-17 20:02:28 294
原创 C++静态成员变量与静态成员函数
在C++中,static关键字修饰成员变量被称为静态成员变量,修饰成员函数被称为静态成员函数。静态成员变量何时使用静态成员变量:来实现多个对象共享数据。 静态成员变量属于类:不属于某个具体的对象,只为静态成员变量分配一份内存,所有对象使用的都是一份内存中的数据。 静态成员变量类外初始化:必须在类声明的外部初始化,初始化时不能再加 static,但必须要有数据类型。 静态成员变量可以通过类来访问。静态成员变量的内存:静态成员变量是在(类外)初始化时分配。反过来说,没有在类外初始化的 sta
2021-04-17 19:39:12 126
原创 C++的this指针
是什么this 是 C++中的一个关键字。 this 是一个 const 指针(意味着值是不能被修改的),指向当前对象,要用->来访问当前对象(当前对象是指正在使用的对象)成员变量或成员函数。 this 只能用在类的内部,通常只能在成员函数内部使用,用在其他地方没有意义,也是非法的。 this 只有在对象被创建以后才会被赋值,并且这个赋值的过程是编译器自动完成的,用户不必也不能干预。只有当对象被创建后this 才有意义,因此不能在 static 成员函数中使用。什么用隐式形参(传递..
2021-04-17 09:06:02 153
原创 C++智能指针
在C++中,动态内存的管理是用一对运算符完成的:new和delete。动态内存管理经常会出现两种问题:一种是忘记释放内存,会造成内存泄漏;一种是尚有指针引用内存的情况下就释放了它,就会产生引用非法内存的指针(已经释放了又去访问它),造成更加直接的严重后果。为了更加容易(更加安全)的使用动态内存,引入了智能指针在使用得当的情况下,可告别内存泄漏(智能指针使用不当同样会内存泄漏)。建议:能使用智能指针,就不使用裸指针。不得不使用裸指针时,使用静态代码扫描工具和内存检测工具。...
2021-04-12 13:59:13 268
原创 C++函数中指定默认参数
默认参数定义函数时可以给形参指定一个默认的值。 调用函数时若没有给形参赋值,那么就使用这个默认值。 调用函数时可以省略有默认值的参数,将自动使用默认值。 若调用函数时给形参赋值,那么就使用实参指定的值。 默认参数只能放在形参列表的最后。//带默认参数的函数void func(int n, int a = 0, float b=1.2){}int main(){ //为所有参数传值 func(1, 3, 3.5); //为a、b传值,相当于调用func(1, 3
2021-04-11 21:24:04 1065 1
原创 C++命名空间namespace
命名空间目的:解决命名冲突问题//语法格式namespace name{ //variables, functions, classes}//例子namespace Li{ //小李的命名空间 FILE fp = NULL;}命名空间的使用1. 使用域解析操作符::,用来指明要使用的命名空间。Li::fp = fopen("one.txt", "r"); //使用小李定义的变量 fp2. 使用using将命名空间中成员引入。using Li::...
2021-04-11 20:58:10 82
原创 C++拷贝构造函数
拷贝构造函数拷贝发生在初始化阶段,初始化就是首次对内存赋值。 对象的创建包括两个阶段:第一分配内存空间,第二进行初始化。 当以一个对象初始化一个对象时,会调用拷贝构造函数。调用拷贝构造函数的时机:(三种情况)用类的一个对象去初始化另一个对象时。 当函数的形参是类的对象时(也就是值传递时),如果是引用传递则不会调用。 当函数的返回值是类的对象或引用时,会调用拷贝构造函数。因为函数体内生成的对象是临时的,函数体结束,这个对象就消失了,所以要调用拷贝构造函数复制一份。默认拷贝构造函数拷贝构
2021-04-09 17:38:04 176
原创 C++虚函数
C++ 的多态使用了一种动态绑定的技术,这个技术的核心是虚函数表(下文简称虚表)。类的虚表:每个包含了虚函数的类都包含一个虚表。一个类继承了包含虚函数的基类,那么这个类也拥有自己的虚表。...
2021-04-08 12:25:00 74
原创 C++的默认构造函数
构造函数:类进行实例化时调用的函数,该函数无返回类型 默认构造函数:无需提供初始值(或者说无参数)的构造函数如果没有定义任何构造函数,则编译器会自动定义默认构造函数。 编译器自动提供的默认构造函数的就是一个空函数,什么操作也不做,只是为了满足程序的运行。 如果还需要初始化成员变量,那么一定要自行定义默认构造函数。 只要自行定义了构造函数,编译器就不会再提供默认构造函数了,最好手动定义一个默认构造函数。...
2021-04-08 11:15:22 273
原创 认识C++的内联函数
1、什么是内联函数内联函数的运行机制与常规函数不同。常规函数调用会使程序跳到另一个地址(函数地址),并在函数结束时返回。来回跳跃并记录跳跃位置需要一定的开销。而对于内联函数,编译器将使用函数的定义体来替代函数调用语句,程序无需跳到另一个位置处执行代码,再跳回来。因此,内联函数的运行速度比常规函数快,但代价是需要占用更多的内存,是一种空间换取时间的做法。2、内联函数的优缺点优点:当函数体...
2020-02-25 11:42:26 101
原创 初步了解hosts 文件
1、什么是hosts文件hosts是一个没有扩展名的系统文件,是网址域名与相应 IP 地址映射关系的数据库。2、hosts文件位置在 Windows 系统中,hosts文件的位置为:C:\Windows\System32\drivers\etc3、Hosts文件的工作方式当访问网站,需通过DNS服务器把要访问的网络域名解析成正确的IP地址,计算机通过IP地址找到要访问的服务器。若对每个域名都...
2020-01-09 21:20:44 792
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人