C++编程知识快速复习(上)(精华高效全面版)
总第001篇
C++知识比较多,也比较乱,对于我们长期从事实战开发的人员来说,很多基础知识很容易遗忘,自己看书复习又没有那么多时间,即于此,在接下来的三篇文章,概括讲解C++编程知识精华,旨在让大家可以快速的复习和翻阅,让开发更有效率。
1、C++基本结构
C++语言由头文件与源文件组成。
头文件中包含:版权与版本信息、宏定义、函数声明和类的声明。宏定义为是了防止头文件被重复引用。<>引用头文件则直接在系统库中查找头文件;“ ”引用头文件则先在当前工程目录下查找,若工程目录中不存在然后在系统库中查找。
源文件中包含:版权与版本信息,对头文件的引用,系统功能代码的实现。用ifndef/define/endif结构产生预处理的宏定义块。类成员函数可以在类声明中被定义,并且自动生成内联函数,这虽然会使书写方便,但会造成风格上的不一致,因此建议头文件中只存放声明而不定义。
头文件的作用:a.很多时候不便公开头文件代码,用头文件来调用库功能,编译器从库中提取相应的代码;b.头文件能加强安全类型的检查,如果接口实现错误会报错,以便开发者调试。
2、C++基本要素
标识符:只能是字母、数字、下划线组成,且不能以数字开头。标识符在C++中区分大小写,长度是任意的,一般前1024个是有意义的。C语言中一般前16个是有效的。
常量:在运行时不能被改变,在定义常量时可以设置初始值。对于常量,编译器将其放置于一个只读的存储区域。
变量:在程序中可以被随意赋值,对于每一个变量都有两个属性:左值和右值。左值是指变量的地址值,即存储变量的内存地址;右值是变量的数据值,即内存地址中存储的数据。
变量初始化的几种形式如下图:
文章图片
3、变量的存储类型
变量的声明是告知编译器变量的名称和数据类型,变量的定义是为变量分配存储区域。使用extern只声明而不定义变量;若一个文件中声明定义一个全局变量int var=0;
在另一个文件中声明extern int var;
即可访问此变量;
static存储类型表示变量在函数或文件内的“持久性”,也称为静态变量,静态变量可分为局部静态变量和全局静态变量。
局部静态变量:函数内的变量用static修饰时,将被分配在持久的存储区域,当函数调用结束后并不释放,保留其值以便下次调用。局部静态变量的作用域为当前函数,不能被外界函数和文件访问;
全局静态变量:作用域仅限于当前定义的文件,不能被其它文件使用extern关键字访问;
使用register关键字,表示变量将被放置在CPU寄存器中,访问register变量要比访问普通变量快得多,但 register只能用于局部变量或作为函数的形式参数,不能用来定义全局变量。
变量有静态存储和动态存储,全局变量和静态变量是静态存储的,普通的局部变量是动态存储的,auto关键字表示变量动态存储,默认情况下,局部变量均属于auto变量。
4、数据类型
数值类型分为整型和实型,整型又分为有符号型和无符号型。下图是各种类型及字节数:
文章图片
注意:两个实数比较,尽量不要使用“==”或“!=”,而要使用“>=”或“<=”之类的运算符。因为用等于或不等于时,若程序精度要求较高,可能产生未知的错误,也可能产生未知的结果。通常在比较实数时要定义实数的精度,在这个精度内来确定两数的等或不等。
字符类型:C++中用单引号来确定字符变量,用双引号来确定字符串变量,字符是以ASCII的形式存储的,因此可以直接将整数赋值给字符变量。字符存储用一个字节。
数组类型:数组的初始化要注意一些细节,如下图。定义二维数组时,可以省略第一维的长度,但不可以省略第二维的长度。
文章图片
布尔类型:布尔类型和整数类型可以相互赋值
枚举类型:枚举类型是用int类型实现的,占用4个字节,定义格式为:enum<枚举类型名>{常量1,常量2,…},定义枚举类型时可以为各常量提供一个整数值,默认情况第一个数为0,没有定义的值应为前一个值加1。在定义函数时将函数参数设置为枚举类型,这样可以限制调用函数必须提供枚举类型中的某个常量,而不能随意输入一个整数。
结构体类型:定义格式为struct<结构体类型名>{结构体类型变量};
若只要定义一次结构体类型变量,可以不写结构体类型名称。访问结构体成员用“.”,两个结构体变量可以直接赋值。
结构体空间分配问题:涉及字节对齐问题,即编译器在为结构体变量分配空间时,保证下一个成员的偏移量应为该成员数据类型长度的整数倍。在开发应用程序时,有时要用一个字节表示多项内容,这时就要用位域来访问一位数据,如下代码所示:
文章图片
共用体提供了一种机制,使多个变量(共用体中的成员)可以共享同一个内存地址,各成员内存起始地址位置相同,每一瞬间只有一个成员起作用,起作用的成员是最后一次存放的成员。
指针是用来存放变量地址的。通过变量访问变量是直接访问,通过指针访问是间接访问。注意区分指针数组和数组指针,如下图:
文章图片
用const关键字来修饰指针的几种情况:
文章图片
引用即是目标的一个别名,操作引用与操作实际的目标对象是相同的。引用的定义格式如下:数据类型&引用名称=目标对象
用typedef关键字可以自定义数据类型,它不是创建一个新的数据类型,而是为已有数据类型创建一个新的名称,使用自定义类型可以提高程序的移植性。语法格式为:typedef 数据类型 新名称 。
5、运算符
异或有很强大的功能,通常用异或运算来实现二进位的反转,也可用来实现两个数的互换。
任何数与0进行按位异或运算,结果为数据本身;
变量与自身按位异或运算,结果为0;
按位异或运算具有交换性,a^b^c=a^c^b=b^a^c;
用异或运算来交换两个数的例子如下:
文章图片
sizeof()用于返回变量、对象或数据类型的字节长度,在32位系统中,指针的长度为4字节。
END,下篇继续!!!
【C++编程知识快速复习(上)(精华高效全面版)】本文首发于微信公众号:实战开发者。可识别下方二维码关注实战开发。
文章图片
推荐阅读
- 知识
- 小学英语必考的10个知识点归纳,复习必备!
- opencv|opencv C++模板匹配的简单实现
- 生发知识,带你深入了解
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- 知识付费的怪力乱象
- HTML基础--基本概念--跟着李南江学编程
- 知识与爱情读后感
- 我的软件测试开发工程师书单