1.运行时类型识别(run-time type identification,RTTI)的功能由两个运算符实现:
(1)typeid运算符,用于返回表达式的类型。
(2)dynamic_cast 运算符,用于将基类的指针或引用安全地转换成派生类的指针或引用。
2.输出补白:标准库提供了一些操作符帮助我们完成所需的控制:
(1)setw指定下一个数字或字符串值得最小空间。
(2)left表示左对齐输出。
(3)right表示右对齐输出,右对齐是默认格式。
(4)internal控制负数的符号的位置,它左对齐符号,右对齐值,用空格填满所有中间空间。
(5)setfill允许指定一个字符代替默认的空格来补白输出。
3.为了确定最佳匹配,编译器将实参类型到形参类型的转换划分成几个等级,具体排序如下所示:
(1)精确匹配,包括以下情况:
(I)实参类型和形参类型相同。
(II)实参从数组类型或函数类型转换成对应的指针类型。
(III)向实参添加顶层const或者从实参中删除顶层const。
(2)通过const转换实现的匹配
(3)通过类型提升实现的匹配
(4)通过算术类型转换或指针转换实现的匹配。
(5)通过类类型转换实现的匹配。
4.类的基本思想是数据抽象(data abstraction)和封装(encapsulation)。
数据抽象是一种依赖于接口(interface)和实现(implementation)分离的编程(以及设计)技术。类的接口包括用户所能执行的操作;类的实现则包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。
封装实现了类的接口和实现的分离。封装后的类隐藏了它的实现细节,也就是说,类的用户只能使用接口而无法访问实现部分。
类要实现数据抽象和封装,需要首先定义一个抽象数据类型(abstract data type)。
5.在C++语言中,我们使用访问说明符(access specifiers)加强类的封装性:
(1)定义在public 说明符之后的成员在整个程序内可被访问,public 成员定义类的接口。
(2)定义在private说明符之后的成员可以被类的成员函数访问,但是不能被使用该类的代码访问,private部分封装了(即隐藏了)类的实现细节。
6.在cctype头文件中定义了一组标准库函数:
(1)isalnum(c) 当c是字母或数字时为真
(2)isalpha(c) 当c是字母时为真
(3)iscntrl(c) 当c是控制字符时为真
(4)isdigit(c) 当c是数字时为真
(5)isgraph(c) 当c不是空格但可打印时为真
(6)islower(c) 当c是小写字母时为真
(7)isprint(c)当c是可打印字符时为真(即c是空格或c具有可视形式)
(8)ispunct(c) 当c是标点符号时为真(即c不是控制字符、数字、字母、可打印空白中的一种)
(9)isspace(c) 当c 是空白时为真(即c是空格、横向制表符、纵向制表符、回车键、换行符、进纸符中的一种)
(10)isupper(c) 当c是大写字母时为真
(11)isxdigit(c) 当c是十六进制数字时为真
(12)tolower(c) 如果c是大写字母,输出对应的小写字母;否则原样输出c
(13)toupper(c) 如果c是小写字母,输出对应的大写字母,否则原样输出c