C++教程6之附录C++语言概述
The C++ Language 附录A C++语言
本章再此作为C++语言的一本手册,供新手程序员参考,给出比较正式的C++语言用法和句法描述。
A-1 Built-in types 内建类型
每一个C++实现都带有一大堆预先定义的类型,称之为内建类型(built-in types)。利用语言提供的机制象class构造来使用内建类型实现新的类型,在前面章节进行了一些描述。本小节给出内建类型的概述。
A-1.1 Booleans
bool类型表示布尔(逻辑上的)值,该值不是true就是false。
A-1.2 Integers
C++提供了两种类型的整数:signed和unsigned。有符号整数可以保存正负数,无符号只能保存整数。
最小整数类型(根据bit数)是一个字符。相应关键字是char。接着是short,随后是int和long。这些类型的大小与计算体系架构有关系,唯一可以认定的就是:
char <= short < int <= long
这里的type1在32位计算体系结构里,unsigned char是8位bit,unsigned short有16bit,unsigned int和unsigned long都是32bit。对应的signed整数用1bit储存符号,因此:
max_value(signed type) < max_value(unsigned type)
这就是为什么要提供无符号整数:可以保存更大的整数。注意到关键字signed可以省略,long int与long一样。
A-1.3 Reals
用关键字float和double(double precision)声明实数。对于大小:
floatA-1.4 Exercises
1. C++里有哪些内建类型
2. Signed int和int一样吗?
3. 在UNIX系统上,内建类型最大值通常在头文件/usr/include/limits.h, /usr/include/values.h里。找出来内建类型在你机器上最大最小值分别是多少,看看在你机器上long是多少bit?
A-2 Constants
常量是最简单的语言构造。C++提供下面类型的常量:
1. Strings constants
字符串常量,双引号(")包着。例如: "hello!",
2. Character constants
单一字符,单引号包着(’)。’c’, ’w’,是合法的字符 常量。还有一些特殊的常量’\n’ (newline) ’\t’ (tab),等等。转义字符(escape,\将后面跟着的字符重新定义),这些用于格式化输出。
3. Integer constants
整数常量,+或者-跟着数字序列,后面U表示无符号,L表示long,UL表示unsigned long。这些数字可以是八进制、十进制或者十六进制形式。例如,017,0xf分别是八进制和十六进制表示的十进制15。注意到八进制以0开始,十六进制以0x开头。所有其他的形式看作是十进制。
4. Real constants
xxx.yyy这种形式的序列,xxx和yyy是数字。实数常量也可以前面加+或者-表示正负数。例如,123.5,1.是合法的实数常量。实数常量还有一种方便的书写形式xxx.yyy.10zzz,简单记为xxx.yyyEzzz(这称之为科学记数法)。例如1234E-1或者12.35e1都是合法的实数常量与135.5相等(大小写e都是可用的)。
A-3 Input and Output 输入和输出
和C一样,C++定义了标准输入、输出和错误流,程序运行时打开这些流。这些流时:cin,cout和cerr,这和C里的stdin,stdout以及stderr对应。
Cin,cout和cerr时输入输出类的实例。这些类在iostream.h(最新标准头文件不带后缀)里定义。分别使用插入操作符>>和抽取操作符<<从流读数据,写数据到流里面:
- #include
- void main()
- {
- int i;
- cout << "enter a positive integer i: ";
- cin >> i;
- cout << "you have entered " << i << "\n";
- }
可以看到,我们可以使用同样的输出流cout完成各种不同类型对象的输出。对于内建的类型都是可用点。用户定义类型需要重载插入/抽取操作符,这样才能象内建类型一样使用流。
A-4 Overloading operators 重载操作符
+ - * / % ˆ &
˜ ! , = < > <= >=
++ -- << >> == != &&
+= -= *= /= %= ˆ= &= =
<<= >>= [] () -> ->* new delete
有些操作符只能在类里重载为成员函数: =,[],()和->。还要注意:尽管可以重载这些操作符,但是在算术演算里不能改变这些操作符优先级。例如,假设我们重载了^在某个类X里做乘方运算:
- X a, b, c;
- c = aˆ3 * b; // oops: evaluates to aˆ(3 * b)
A-5 Free-store management 自由存储管理
C++提供new和delete来在heap上分配和释放对象。例如:
- char *cp = new char; // allocate 1 character
- int *ip = new int[10]; // allocate 10 integers
- delete cp; // delete 1 character
- delete[] ip; // delete 10 integers
以这种方式分配的对象的值没有定义。而用户定义类型不同,new和delete会调用类型的构造函数来进行正确初始化:
- rational *rp = new rational; // allocate 1 rational and
- // call the default constructor
- vector *vip = new vector(10);
- // allocate 1 vector of int and
- // call the constructor vector(int)
调用delete时会调用析构函数释放分配的内存。与C的free一样,delete必须要手动调用。C++没有提供垃圾回收机制。
某个类型的数据可以通常方式定义:
rational v[10]; // allocate 10 rationals and call the default
// constructor on each one
与C里一样,这样的数组出了作用域自动释放。
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
