概述
1.C++相关知识
C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。
对于我们公司来说,我们平常用的C++最多的地方就是做一些功能以及解析协议,它的基本语法相较于别的编程语言,例如java,C等差距也不是很大,语言都是相通的。对于循环,判断,常量等一些基本的更是差不多一样,下面简单列举一些我们在解析协议中可以用到的知识点以及语法(不足的地方可以借鉴C++相关的书或者网络资料)。
2.C++注释
C++注释支持单行注释以及多行注释,一般采用//来表示单行注释,采用/* ……*/来表示多行注释。单行注释以//开始,到行尾为止。多行注释从/*开始,到*/结束。中间的…表示注释的内容,多行注释是不可以嵌套使用的,不过可以在一种注释里面嵌套另外一种注释。在Qt里面注释代码就是选中需要注释的代码,然后ctrl加 / 快捷键来注释。(当然还有别的表示方式,这是最简单好记的)。
3. 基本数据类型
C++的基本数据类型跟别的也基本一样,其中包括了布尔型(bool),字符型(char),整形(int),浮点型(float),双浮点型(double)以及其他的。一个基本数据类型可以用一个或者多个类型修饰符来修饰。类型修饰符:(signed,unsigned,short,long)。
枚举类型(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型。所谓"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。如图1-7所示:
图1-7
如果枚举没有初始化, 即省掉"=整型常数"时, 则从第一个标识符开始例如,下面的代码定义了一个颜色枚举,变量 c 的类型为 color。最后,c 被赋值为 "blue"。
enum color { red, green, blue } c;
c = blue;
默认情况下,第一个名称的值为 0,第二个名称的值为 1,第三个名称的值为 2,以此类推。但是,您也可以给名称赋予一个特殊的值,只需要添加一个初始值即可。例如,在下面的枚举中,green 的值为 5。
enum color { red, green=5, blue };
在这里,blue 的值为 6,因为默认情况下,每个名称都会比它前面一个名称大 1,但 red 的值依然为 0。
5.变量类型
变量其实只不过是程序可操作的存储区的名称。C++ 中每个变量都有指定的类型,类型决定了变量存储的大小和布局,该范围内的值都可以存储在内存中,运算符可应用于变量上。变量的名称可以由字母、数字和下划线字符组成。它必须以字母或下划线开头。大写字母和小写字母是不同的,因为 C++ 是大小写敏感的。
C++ 中的变量声明向编译器保证变量以给定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。
当您使用多个文件且只在其中一个文件中定义变量时(定义变量的文件在程序连接时是可用的),变量声明就显得非常有用。您可以使用 extern 关键字在任何地方声明一个变量。虽然您可以在 C++ 程序中多次声明一个变量,但变量只能在某个文件、函数或代码块中被定义一次。同样的,在函数声明时,提供一个函数名,而函数的实际定义则可以在任何地方进行。
6.指针
指针是一个变量,其值为另一个变量的地址,即内存位置的直接地址。就像其他变量或常量一样,您必须在使用指针存储其他变量地址之前,对其进行声明。
定义一个指针变量、把变量地址赋值给指针、访问指针变量中可用地址的值。这些是通过使用一元运算符 * 来返回位于操作数所指定地址的变量的值。
在我们所解析的协议里面,我们一般把数据转成我们所需要的结构体,然后就可以利用指针的知识来进行取值等,这个在后面的协议的相关内容中会涉及到。这里先简要提及一下。
C++的知识在这里都是简单的提及一下,所用到的详细的知识是可以去网上看一些菜鸟教程或者其他的相关的书籍,我们所用到的最常用的也就是这些内容,至于数组,循环,判断等一些基本逻辑或者其他的部分知识都跟别的的语言是差不多的,如果你懂得C++或者其他语言,这些都还算是比较好学的,至于比较难用的,你都可以在后面工作的过程中边工作边学习。随时给自己充电。
7.结构体
结构体在工作中一般会在解析协议里用来定义协议里的各个字段,相信学过C++的人对于结构体并不陌生,现在简单回顾一下。结构体就是一个可以包含不同数据类型的一个结构,它是一种可以自己定义的数据类型,它的特点和数组主要有两点不同,首先结构体可以在一个结构中声明不同的数据类型。第二,相同结构的结构体变量是可以相互赋值的,而数组是做不到的,因为数组是单一数据类型的数据集合,它本身不是数据类型(而结构体是),数组名称是常量指针,所以不可以作为左值进行运算,所以数组之间就不能通过数组名称相互复制了,即使数据类型和数组大小完全相同。
定义结构体使用struct修饰符,例如:
struct test
{
float a;
int b;
};
上面的代码就定义了一个名为test的结构体,它的数据类型就是test,它包含两个成员a和b,成员a的数据类型为浮点型,成员b的数据类型为整型。
由于结构体本身就是自定义的数据类型,定义结构体变量的方法和定义普通变量的方法一样。例如:
test pn1;
这样就定义了test结构体数据类型的结构体变量pn1,结构体成员的访问通过点操作符进行,pn1.a=10 就对结构体变量pn1的成员a进行了赋值操作,
注意:结构体声明的时候本身不占用任何内存空间,只有当你用你定义的结构体类型定义结构体变量的时候计算机才会分配内存。
8.构造函数和析构函数
有关构造函数与析构函数一般在解析协议的时候会用到,所以就简单介绍一下相关的知识。首先说一下构造函数和析构函数的由来:类的数据成员不能在类的声明时候初始化,为了解决这个问题? 使用构造函数处理对对象的初始化。构造函数是一种特殊的成员函数,与其他函数不同,不需要用户调用它,而是创建对象的时候自动调用。析构函数是对象不再使用的时候,需要清理资源的时候调用。
构造函数的基本语法:C++中的类需要定义与类名相同的特殊成员函数时,这种与类名相同的成员函数叫做构造函数;构造函数可以在定义的时候有参数;也可以没有任何返回类型。
构造函数的调用: 一般情况下,C++编译器会自动的调用构造函数。特殊情况下,需要手工的调用构造函数
class Test
{
public:
//构造函数
Test()
{
}
}
析构函数的基本语法:C++中的类可以定义一个特殊的成员函数清理对象,这个特殊的函数是析构函数;析构函数没有参数,也没有任何返回类型;析构函数在对象销毁的时候自动调用;析构函数调用机制:C++编译器自动调用。
class Test
{
~Test()
{
}
}
构造函数与析构函数的总结:
- 构造函数时C++中用于初始化对象状态的特殊函数;
- 构造函数在对象创建的时候自动调用;
- 构造函数和普通成员函数都遵循重载原则;
- 拷贝构造函数是对象正确初始化的重要保障;
- 必要的时候必须手工的写拷贝构造函数。
最后
以上就是传统胡萝卜为你收集整理的C++相关知识的全部内容,希望文章能够帮你解决C++相关知识所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复