l 面向对象编程(OPP)的本质是设计并扩展自己的数据类型。设计自己的数据类型就是让类型与数据匹配。内置的C++类型分两种:基本类型和复合类型。
C++变量命名规则:
n 在名称中只能使用字母字符、数字和下划线
n 名称的第一个字符不能是数字
n 区分大小写
n 不能使用C++的关键字作名称
n 以两个下划线或下划线和大写字母打头的名称被保留给实现(编译器及其使用的资源)使用。以一个下划线开头的名称被保留给实现,用作全局标识符
n C++对名称长度没有限制
操作符sizeof
sizeof算法指出,在使用8位字节的系统中,int的长度为4个字节。可对类型名或变量名使用sizeof操作符。对类型名(如int)使用sizeof操作符,应将名称放在括号中;但对变量名使用该操作符,括号是可选的。
cout<<”int is”<<sizeof (int) << “bytes.\n”;
cout<<”short is”<<sizeof n_short<< “bytes.\n”;
符号常量
#define编译命令是C语言遗留下来的。C++有一种更好的创建符号常量的方法:使用关键字const.
进制显示
控制符dec,hex,oct分别指示cout以十进制、十六进制、八进制显示整数。默认格式为十进制,在修改格式之前,原来的格式一直有效。
如int chest=42;
int waist=42;
int inseam=42;
cout<<”chest=”<<chest<<endl;
cout<<hex;
cout<<”waist=”<<waist<<endl;
cout<<oct;
cout<<”inseam=”<<inseam<<endl;
确定常量类型
整数后面的后缀:l或L表示long型;u或U后缀表示unsigned int型;ul/uL/Ul/UL/lu/LU/lU/LU皆表示unsigned long型。
字符类型
实际上,多数系统所支持的字符都不超过256种。因此用一个字节就可以表示所有的符号。在美国,最常用的符号集是ASCII字符集。C++实现使用的是主机系统的编码。IBM大型机使用EBCDIC编码。ASCII和EBCDIC都不能很好地满足国际需要,C++支持的宽字符类型可以存储更多的值,如国际Unicode字符集使用的值。
成员函数cout.put()
类定义了如何表示和控制数据。成员函数归类所有,描述了操纵类数据的方法。类ostream有一个put()成员函数,用来输出字符。只能通过类的特定对象(cout)来使用成员函数。要通过对象使用成员函数,必须用句点将对象名和函数名连接起来。句点被称为成员操作符。cout.put()的意思是,通过类对象cout来使用函数put()。cout.put()成员函数是另一种字符显示的方法。
在早期版本的C++中,不区分int型和char型,所以使用cout.put()是显示整形和字符型上做区分。
有些字符不能直接通过键盘输入到程序中。因为C++语言赋予了它们特殊的含义。对于这些字符,C++提供了一种特殊的表示方法——转义序列。
char alarm='\a';
cout<<alarm<<"Don't do that again!\a\n";
cout<<"Ben \"Buggsie\" Hacker \n was here!\n";
由上可以看出,被转义的字符可分为两类,一类是会被C++代码编译器解释了其它含义,但有时候需要其本身的ACSII符号来显示的,如双引号。另一类,是其符号本身代表一种操作。用转义字符不是想用来显示,而是要告诉程序执行一个动作的。如\n.
C++常见的转义序列编码:
换行符 | NL(LF) | \n |
水平制表符 | HT | \t |
垂直制表符 | VT | \v |
退格 | BS | \b |
回车 | CR | \r |
振铃 | BEL | \a |
反斜杠 | \ | \\ |
问号 | ? | \? |
单引号 | ‘ | \’ |
双引号 | “ | \” |
可以基于字符的八进制或十六进制来使用转义序列。如打印右箭头,使用
cout<<’\x1a’;或者cout<<’\032’;
通用字符名
C++标准允许实现提供扩展源字符集和扩展执行字符集。C++可以使用通用字符名,它独立于特定的键盘。通用字符名以\u或\U开头。\u后面是8个十六进制位,\U后面则是16个十六进制位。
如int k\u00F6rper;
cout<<”Let them eat g\u00E2teau.\n”;
unicode提供了一种表示各种字符集的解决方案
ISO10646,对多种语言文本进行编码的标准。这两个标准是同步的。
wchar_t,宽字符型。可以表示扩展字符集。iostream头文件的最新版本提供与cint和cout类似的工具——wcin和wcout,用于处理wchar_t流。可以通过加上前缀L来表示宽字符常量和宽字符串。
如wchar_t bob=L’P’;
wcout<<L”tall”<<endl;
ANSI/ISO c++标准添加了一种名叫bool的新类型。任何数字值可指针值都可以隐式转换为bool值。任何非零值都被转换为true,而非零值转换为false.
l const 限定符
创建常量的通用格式
const type name=value;
注意,应在声明中对const进行初始化。如果在声明中没有初始化常量,则该常量值是不确定的,且无法修改它。
l 浮点数
-8.33E4指的是-83300.
d.dddE+n,表示小数点向右移n位
d.dddE-n,表示小数占向左移n位。
Borland C++中
float,有效位数6
double,有效位数15
long double,有效位数18
书写浮点常量的时候,默认为double类型,如果希望常量为float型,可以使用f或F后缀;对于long double类型,可使用l或L后缀。
除法运算时,当两个操作数皆为整形时,相除结果的小数部分被丢弃,结果还是一个整数。当有一个操作数为float型时,结果为float型。
类型转换
1. 变量赋值进
long so_long;
short thirty=value;
so_long= thirty;
潜在问题
n 大浮点类型转换成小浮点类型。如将double转换为float型时,精度降低,如果double型的值超出float型的值的范围 ,结果不确定;
n 将浮点类型转换为整形,小数部分丢失。浮点值超出整形范围,结果不确定
n 大整形转化为小整形。如long转换为short,原来的值超出目标范围,通常只复制右边的字节。
2. 表达式中转换
short chickens=20;
short ducks=35;
short fowl=chicks+ducks;
3. 传递参数进转换
4. 强制类型转换
强制类型转换的通用格式
(typename)value;
typename (value);