简谈数据类型

来源:互联网 发布:大数据分析师培训学费 编辑:程序博客网 时间:2024/06/06 01:06

       C++融合了三种编程方式:过程性编程,面向对象编程,模板支持的泛型编程。
       C++是在C的基础上发展而来,所以C++包含C中的很多特性,而C的后面的C99等标准里面新增了一点对C++的支持,在学习C/C++的过程中,要尽量区分两个各有的内容。在C++中,代码行的注释是由//引出的,而C是在/* */中包含的,两种语言都支持这样的注释。C++的头文件名称较C也有很多不同,并且新增了名称空间。总体来看,C++最明显的地方就在于对象和类的概念,以及数据隐藏、继承、多态、友元等的特性,笔者初读《C++ Primer Plus》一书时,对这些新概念搞的一头雾水,不过还是最终看完了整本书,虽然对C++有了一点了解,也能简单的使用类什么的,但这样的基础远远不够牢固,在笔者学习《算法导论》时,很多伪代码想要用C++实现时显得很吃力,这本C++的经典书目值得反复翻看,所以今次笔者重新拜读次数,巩固自己的基础,为以后学习更多的内容做好充分的准备。此次先来总结C++数据类型的一点内容
       C++的内置类型分两组:基本类型和复合类型,基本类型即整数和浮点数,复合类型是在基本类型的基础上创建的,包含数组、字符串、指针和结构。顾名思义,整数类型存放的都是整数数据,浮点类型存放的都是有小数的数据。

基本类型

整数类型

       整数类型中根据所占内存位的不同有不同的类型,C++中规定short至少16位,int至少和short一样长,long至少32位,且至少与int一样长,long long至少64位,且至少与long一样长。具体的长度可以用sizeof运算符得到,在头文件climits中包含了关于整型限制的信息。有三种显示整数的方式:八进制、十进制、十六进制,可以使用控制符oct、dec、hex来分别指示三种方式的显示。

std::cout << hex;std::cout << oct;

       在使用char类型时,其可以表达的字符是有限个,而我们可能用到的字符个数远远大于这个限制,所以有了wchar_t,C++11新增char16_t,char32_t,可以用来表示更多的字符。
对于无法从键盘中输入的字符,可以使用转义序列,通过\实现特殊字符的显示。

浮点类型

       另一种基本类型就浮点数,计算机将这样的值分成两部分存储,一部分表示值,另一部分表示对值进行放大或缩小。C++有三种浮点类型:float、double、long double,对它们有效位数要求float至少32位,double至少48位,且不少于float,long double至少和double一样多,可以在cfloat头文件中找到系统的限制。
       有时候我们需要使用常量进行计算或者赋值,常量的类型由于没有声明编译器不知道开发者希望用的类型是什么,可以通过添加后缀显示的告诉编译器。

1.234f1.23E20F201L2999UL

其余内容

       限定符const,声明常量时使用,其值初始化之后不能再改变,使用const时必须在声明时就对常量初始化。

const int pi = 3.1415926;

       C++中对于变量的初始化新增了一种方式:列表初始化{ },对数据的转换比较严格,不允许缩窄,可以使用“=”,也可以忽略不写,大括号内可以不包含任何东西,这时变量将初始化为0。

int i = {7};int i {7};int i { };

       五种基本的算数运算符:+、-、*、/、%,其中特别注意%的两个操作数必须是整数。

复合类型

       当基本类型不能满足我们的需要时,复合类型就显得很重要了。

数组

       数组是一种数据格式,能够存储多个同类型的值,C++数组从0开始编号,使用数组时需要注意下标值不要超出范围,编译器不会检查使用的下标是否有效,只有在定义数组时才能进行初始化,不能将数组赋给另一个数组。

int a[3] = {2, 3, 4};int b[3] {2, 3, 4};int c[3] { };

字符串

       C++字符串有两种:C风格字符串和基于string类的字符串。

C风格字符串

       C风格的字符串具有一种特殊的性质:以空字符结尾,空字符被写作\0。其ASCII码为0,用来标记字符串的结尾。可以用引号括起来的字符串进行赋值,这种字符串称为字符串常量或字符串字面值,这种方式隐式包含了结尾的空字符串,不需要显示的包含。使用strlen()来计算数组中字符串的长度,不把空字符计算在内。进行字符串的输入时,通过getline()和get()来进行整行的输入,需要注意getline()读取换行符并丢弃,而get()将换行符保留在输入序列中。strcpy()将字符串复制到字符数组中,strcat()将字符串附加到字符串末尾。

char a[] = “test”;int n = strlen(a);strcpy(a, b);strcat(a, b);cin.getline(name, size);cin.get(name, size);

string类

       使用string类型的变量,需要包含string头文件,相对于C风格字符串,string类相互赋值,可以使用“+”和“=”运算符来完成strcpy和strcat的功能。string不需要指定字符串的大小,string可以自动调整大小。

std::string str;str1 = str2;str3 = str1 + str2;

       当需要在屏幕上输出字符串字面值时,可能其中含有“””,可以使用转义字符来输出,或者使用前缀R来表示原始字符串:R”+(…)+”。也可以自定义定界符。

std::cout << “a,\”b\”,c,\”d\”,e”;  //a,”b”,c,”d”,estd::cout << R”(a,”b”,c,”d”,e)”;std::cout << R”+*( a,”b”,c,”d”,e)*+”;

结构

       使用struct关键字声明结构,使用一个结构存储多种类型的数据,不同于C,C++可以在声明结构变量是省略struct。

struct student{  int ID;  std::string name;};student stu { 0101, “Avin”};stu.ID = 0101;std::cout << stu.name;

共用体

       使用union声明共用体结构,不同于struct存储多种变量,union只能存储其中一种类型。

union test{  int a;  double b;};

枚举

       使用enum声明枚举类型,是一种创建符号常量的方式,在默认情况下,将整数复制给枚举量,第一个枚举量的值为0,第二个枚举量的值为1,依次类推;也可以使用显示的方式指定整数值来覆盖默认的声明值,需要注意枚举变量的值只能是整数。


       此外,还有一种类型叫指针,关于指针的内容我单独去总结,不放在这里谈论,指针的使用是C/C++的精华所在,合理高效安全使用指针是每个程序员必备的技能,鉴于此,笔者将在下一篇总结中好好的分析指针的内容。

0 0