面向对象编程(OOP)的本质是设计并扩展自己的数据类型。
内置的C++数据类型分为基本类型和复合类型。
基本类型分为整数和浮点数。
复合类型分为数组、字符串、指针和结构。
C++通过使用变量来存储数据。
为把信息存储在计算机中,程序必须记录三个基本属性:
C++提倡使用一种有含义的变量名。在命名变量时必须遵守以下规则:
最后一点和C99标准中有所不同,C99标准只保证名称的前63个字符有意义。
整型有short、int、long、long long四种类型。
注:VC++6.0不支持long long型
不同的操作系统int的长度是不同的。
要知道系统中整型的最大长度,可以在程序中使用C++工具进行检查,sizeof可以实现该功能,sizeof返回到的是类型或变量的(字节)长度。
Climits(老式:limits.h)包含了关于整型限制的信息。
climits中的符号变量:
符号常量 |
表示 |
CHAR_BIT |
char的位数 |
CHAR_MAX |
char的最大值 |
CHAR_MIN |
char的最小值 |
1)变量的初始化:
C++11中变量的初始化方式(可用于数组和结构,C98中也可用于单值变量):
int ham={24};
或者可以是:
int emus{7}
或者也可以是:
int roc={}; //roc=0
2)无符号整数
unsigned int、unsigned short、unsigned long、unsigned long long。
先说明变量数值越界的问题:
例:
exceed.cpp
#include<iostream>
using namespace std;
int main(void)
{
short a; //a为有符号整数
unsigned b; //b为无符号整数
a=0;b=0;
cout<<"a为有符号整数,b为无符号整数。"<<endl;
cout<<"本操作系统中无符号整数最大为:"<<USHRT_MAX<<endl;
cout<<"a=0,b=0"<<endl;
a=a-1;
b=b-1;
cout<<"a-1为:"<<a<<endl;
cout<<"b-1为:"<<b<<endl;
a=SHRT_MAX; //a为有符号整数的最大值
b=a;
cout<<"a为有符号整数,b为无符号整数。"<<endl;
cout<<"本操作系统有符号整数最大为:"<<SHRT_MAX<<endl;
cout<<"a= SHRT_MAX,b= SHRT_MAX"<<endl;
a=a+1;
b=b+1;
cout<<"a+1为:"<<a<<endl;
cout<<"b+1为:"<<b<<endl;
return 0;
}
在windows7SP1的32位系统中使用VC++6.0运行得到的结果如下:
注:C++确保了无符号类型的这种行为,但C++并不保证符号整型超越限制的不出错。
3)选择整型类型
C++中提供了大量的整型。如没特殊情况,应选择int型,使用此类型时计算机的处理效率最高。
若变量的值为非负,则可采用无符号型。
若变量的最大可能值超过16wei位,使用long,若超过20亿,使用long long。
若使用大型数组且存储的值小于16位,使用short。
4)整型字面值
C++支持三种计数方式:十进制(decimal)、八进制(octal)、十六进制(hexadecimal)。
另外,cout定义了控制符dec、hex、oct来指示cout以十进制、十六进制和八进制格式显示整数。
例:displaydechexoct.cpp
//使用cout控制符显示整数的十进制、十六进制和八进制形式。
#include<iostream>
using namespace std;
int main(void)
{
int a=42; //定义十进制的a
cout<<"使用不同的形式表示整数。"<<endl;
cout<<dec; //设定以十进制形式显示整数
cout<<"a="<<a<<"(十进制形式)"<<endl;
cout<<hex; //设定以十六进制形式显示整数
cout<<"a="<<a<<"(十六进制形式)"<<endl;
cout<<oct; //设定以八进制形式显示整数
cout<<"a="<<a<<"(八进制形式)"<<endl;
return 0;
}
5) C++确定常量类型的方法
在int为16位,long为32位的系统上,20000为int型,40000为long型,3000000000为long long型。
通过后缀也可确定常量的类型,l,L代表long型;ll,LL代表long long型;还有ull,ULL,ul,lu,LU,UL等。通常使用大写,以免l和1混淆。
6)char类型:字符和小整数
char是专为存储字符而设计的。char是另一种整型。他足够长,能够表示计算机系统中所有的基本符号。
在美国,最常用的字符集是ASCII字符集。
C++使用的是其主机系统的编码——例如IBM大型机使用EBCDIC编码。
C++支持的宽字符类型可以存储更多的值,如国际Unicode字符集使用的值。
函数cout.put()是一个重要的C++OOP概念——成员函数的一个例子。
类定义了如何表示和控制数据。成员函数归类所有,描述了操纵类数据的方法。
比如说类ostream有一个put()成员函数用来输出字符。只能通过类的特定对象(比如cout对象)来使用成员函数。要通过对象来使用成员函数必须通过句点(.)将对象名和函数名称(put())连接起来。句点被称为成员运算符。cout.put()表示通过类对象cout来使用函数put()。
每个字符有对应一个ASCII值。
有些字符不能很直接通过键盘输入到程序中。例如回车。同时双引号不能包含在字符串中。为此,C++提供了一种特殊的表示方法——转义序列。
下表中列出了一些转义序列的编码:
字符名称 |
ASCII符号 |
C++代码 |
十进制数 |
换行符 |
NL(LF) |
\n |
10 |
水平制表符 |
HT |
\t |
9 |
垂直制表符 |
VT |
\v |
11 |
退格 |
BS |
\b |
8 |
回车 |
CR |
\r |
13 |
振铃 |
BEL |
\a |
7 |
反斜杠 |
\ |
\\ |
92 |
问号 |
? |
\? |
63. |
单引号 |
‘ |
\‘ |
39 |
双引号 |
" |
\" |
34 |
例:
#include<iostream>
using namespace std;
int main(void)
{
long passwords1,passwords2;
cout<<"测试密码程序。"<<endl;
cout<<"请输入密码:________\b\b\b\b\b\b\b\b"<<endl; //使用转义字符
cin>>passwords1;
cout<<"请再次输入密码:________\b\b\b\b\b\b\b\b"<<endl; //使用转义字符
cin>>passwords2;
if (passwords1==passwords2)
cout<<"输入一致。"<<endl;
else
cout<<"输入不一致!!"<<endl;
return 0;
}
通用字符名
C++使用通用字符名表示特殊字符。用法类似转义字符。
通用字符名使用\u和\U打头。其中\u后接8个十六进制位,\U后接16个十六进制位。这些为表示的是ISO 10646码点。
如果若用的实现支持扩展字符,则可在标识符和字符串中使用通用字符名。
例:
int k\u00F6rper;
cout<<"Let them eat g\u00E2teau.\n";
注:VC++6.0不支持扩展字符。
在默认情况下,char既不是有符号的,又不是无符号的。
但如果将char作为数值型来看待,signed char 和unsigned char的差异就很重要了。signed char表示的范围为-128~127,unsigned char 表示0~255;
C++新标准中加入了bool类型。他有两个预定义字面值:true和false
例:bool is_ready=true
bool可转化成整型,true=1,false=0。
反过来,整型也可以转化成bool型,非零:true,零:false。
注:VC++6.0不支持bool型。
C++处理符号常量的办法:使用const定义。
例:const int Month=12;
const可以定义整型和浮点型等多种数据类型的符号常量。
这样就可以在程序中使用常量Month了。
常量如果被初始化后,其值是固定的,是无法修改的,若未给其赋值,则其值是位置的也是不可改变的。
常量的标记方法:
C++第二种基本数据类型:浮点数。浮点数能够用来表示带小数部分的数字。
计算机分两部分来存储浮点数。一部分用来表示值,一部分进行方法和缩小。如:34.1=0.341*100;真正的存储是以二进制进行缩放的。
浮点数的书写有两种格式。
第一种为常用的标准小数法:
12.34、-1010.121、-0.0000001;
第二种为E表示法:
2.14e+12、5.12E-12;
e和E均为可选的。
C++有三种浮点类型:float、double、long double。
有效位数的要求:float至少32位。double至少48位,且不少于float。这三种类型的有效位数可以一样多。
通常时,float为32位,double为64位,long double为80、96或128位。另外,这3种类型的指数范围至少是-37到37。
注:cout显示时会删除结尾的0显示。
浮点常量
后缀加f或F。
默认是double型。
C++提供了五种基本算数计算:加法、减法、乘法、除法和求模。每种计算均有两个操作数。
注:如果除法的两个操作数均为整数,则为整除。
求模的两个操作数必须均为整数,否则会报错。
C++自动进行的类型转换:
数值转换可能出现的问题:
转换 |
问题 |
较大浮点类型转化成较小的浮点类型,double变成float |
有效位数降低,值会超出目标类型的取值范围,则值是未知的。 |
浮点型转化成整型 |
小数部分丢失,原来的值超出目标值的取值范围,结果不确定。 |
较大整型转化成较小整型 |
通常会超过目标类型的取值范围,只复制右边的类型。 |
使用{}的初始化时的转换(C++11)
它对类型的转化比较严格,不允许缩窄。即不允许变量的类型无法表示赋给它的值。
表达式中的转换
自动转化:在计算表达式时,C++将bool,char,unsigned char,signed char,short转化为int。此过程也被称为整型提升。
例:
short a=1;
short b=2;
short c=a+b;
计算过程:程序取得a,b的值后,将他们转化成int型,最后再将结果转化成short型。
C++表达式中的转化通过查阅校验表进行修改。
C++11的校验表如下:
整型级别:
从高到低:long long、long、int、short和signed char。
char、int、short和signed char等级相同。
强制类型转换
两种方式:
(typename) value;
typename (value);
第一种为C语言,第二种为C++。
原文:http://www.cnblogs.com/xyb930826/p/5266851.html