Notes of C++ Primer Plus

  1. 通常,IDE允许在辅助窗口中运行程序。程序执行完毕后,有些IDE将关闭该窗口,而有些IDE则不关闭。如果编译器关闭窗口,将难以看到程序的输出,除非程序员眼疾手快,且过目不忘。为查看输出,必须在程序的最后加上一些代码:

    1
    2
    3
    cin.get();
    cin.get();
    return 0;

    cin.get()语句读取下一次键击,因此上述语句让程序等待,直到按下了Enter键(在按下Enter之前,键击将不被发送给程序,因此按其他键都不管用)。如果程序在其常规输入后留下一个没有被处理的键击,则第二条语句是必需的。例如,如果要输入一个数字,则需要输入该数字,然后按Enter键。程序将读取该数字,但Enter键不被处理,这样它将被第一个cin.get()读取。

  2. 控制符dechex**和oct**,分别用于指示cout以十进制、十六进制和八进制格式显示整数

  3. 后缀是放在数字常量后面的字母,用于表示类型。整数后面的lL后缀表示该整数为long常量,uU后缀表示unsigned int常量,ul(可以采用任何一种顺序,大写小写均可)表示unsigned long常量(由于小写l看上去像1,因此应使用大写L作后缀)。例如,在int为16位、long为32位的系统上,数字22022被存储为int,占16位,数字22022L被存储为long,占32位。同样,22022LU和22022UL都被存储为unsigned long

  4. cout.put()函数输出一个字符,如

    1
    2
    3
    char ch='c';
    cout.put(ch);
    cout.put('!');

    输出为

    1
    c!
  5. 成员函数归类所有,描述了操纵类数据的方法。例如类ostream有一个put()成员函数,用来输出字符。只能通过类的特定对象(例如这里的cout对象)来使用成员函数。要通过对象(如cout)使用成员函数,必须用句点将对象名和函数名称(put())连接起来。句点被称为成员操作符cout.put()的意思是,通过类对象cout来使用函数put()

  6. C++转义字符

  7. Unicode提供了一种表示各种字符集的解决方案——为大量字符和符号提供标准数值编码,并根据类型将它们分组。例如,ASCII码成为Unicode的子集,因此在这两种系统中,美国的拉丁字符(如AZ)的表示相同。不过,Unicode还包含其他拉丁字符,如欧洲语言使用的拉丁字符、来自其他语言(如希腊语、西里尔语、希伯来语、阿拉伯语、泰语和孟加拉语)中的字符以及象形文字(如中国和日本的文字)。到目前为止,Unicode可以表示96000多种符号和49个手写符号(script),它还在不断发展中。要了解更多有关的知识,请登录Unicode联盟的网站。 国际标准化组织(ISO)建立了一个工作组,专门开发ISO 10646——这也是一个对多种语言文本进行编码的标准。ISO 10646小组和Unicode小组从1991年开始合作,以确保他们的标准同步。

  8. 程序需要处理的字符集可能无法用一个8位的字节表示,如日文汉字系统。对于这种情况,C++的处理方式有两种。首先,如果大型字符集是实现的基本字符集,则编译器厂商可以将char定义为一个16位的字节或更长的字节。其次,一种实现可以同时支持一个小型基本字符集和一个较大的扩展字符集。8位char可以表示基本字符集,另一种类型**wchar_t宽字符类型)可以表示扩展字符集。wchar_t类型是一种整数类型,它有足够的空间,可以表示系统使用的最大扩展字符集。这种类型与另一种整型(底层(underlying)类型**)的长度和符号属性相同。对底层类型的选择取决于实现,因此在一个系统中,它可能是unsigned short,而在另一个系统中,则可能是int

    cincout将输入和输出看作是char流,因此不适于用来处理wchar_t类型。iostream头文件的最新版本提供了作用相似的工具——wcinwcout,可用于处理wchar_t流。另外,可以通过加上前缀L来指示宽字符常量和宽字符串。下面的代码将字母P的wchar_t版本存储到变量bob中,并显示单词tallwchar_t版本:

    1
    2
    wchar_t bob = L'F';
    wcout << L"tall" << endl;
  9. 任何数字值或指针值都可以被隐式转换(即不用显式强制转换)为bool

  10. const限定符

    格式:const type name = value;const int MONTHS = 12;则程序可以用MONTHS代替12MONTHS被初始化后不能更改

  11. 强制转换的通用格式

    强制类型转换
    第一种格式来自C语言,第二种格式是纯粹的C++。新格式的想法是,要让强制类型转换就像是函数调用。这样对内置类型的强制类型转换就像是为用户定义的类设计的类型转换。