C++Primer (第四版) 重点笔记
2014-02-20 22:18
351 查看
第一章 快速入门
P16:不同的操作系统使用不同的值作为文件结束符。Windows系统下我们按Ctrl+z。Unix系统中,包括 Mac OS-X 机器,通常用 Ctrl+D。
P18:标准库的头文件用尖括号 < > 括起来,非标准库的头文件用双引号 " " 括起来。
第二章 变量和基本类型
P32:C++中,把负值赋给 unsigned 对象是完全合法的,其结果是该负数对该类型的取值个数求模后的值。
所以把 -1 赋给 8 位的 unsigned char,那么结果是 255, 因为 255 是 -1 对 256 求模后的值。
P34:20//decimal十进制
024
//octal 八进制
0x14/0X14
//hexadecimal 十六进制
P36:程序格式化特性:在一行的末尾加一反斜线符号可将此行和下一行当作同一行处理。
P39:左值 与 右值
左值:左值可以出现在赋值语句的左边或者右边。(左值表示存储在计算机内存的对象,相当于地址值。 可对左值进行读写操作,主要是写操作)
右值:右值只能出现在赋值的右边。(右值代表真实数据,数据值)
P42:初始化 直接初始化 和 复制初始化
P44:变量初始化规则
内置类型变量初始化:取决于变量定义的位置。在函数体外定义的变量初始化成 0 ,在函数体里定义的内置类型变量不进行自动初始化。
类类型变量的初始化:类通过定义一个或多个构造函数来控制类对象的初始化。
P45:声明和定义
变量的定义:用于为变量分配存储空间,还可以为变量指定初始值。(在一个程序中,变量有且只有一个定义)
声明:用于向程序表明变量的类型和名字。
注意:定义也是声明:当定义变量时,我们声明了它的类型和名字。 可以通过使用 extern 关键字声明变量名而不定义它。
P50:引用 cosnt 引用
引用与指针的区别:
1.引用必须初始化,而指针不必
2.引用初始化后不能修改,指针可以改变其所指向的对象
3. 不存在指向空值的引用,但是存在指向空值的指针
注意:
1.非 const 引用只能绑定到与该引用同类型的对象。
P53:typedef 名字
1.为了隐藏特定类型的实现,强调使用类型的目的。
2.简化复杂的类型定义,使其更容易理解。
3.允许一种类型用于多个目的,同时使得每次使用该类型的目的明确。
P57: struct 和 class 的区别
用class 和 struct 关键字定义类的唯一差别在于默认访问级别:默认情况下,struct 的成员为 public,而 class 的成员为 private。
P61: 避免多重包含
第三章 标准库类型
P70:
P71:string对象的读写
int main()
{
string s;
cin>>s; //” Hello World! ”
cout<< s <<endl; //”Hello”
return 0;
}
@.读取并忽略开头所有的空白字符(如空格,换行,制表符)。
@.读取字符直至再次遇到空白字符,读取终止。
P72:用getline读取整行文本
int main()
{
string line;
while(getline(cin, line))
cout<<line<<endl;
return 0;
}
@.getline并不忽略行开关的换行符。由于getline函数返回时丢弃换行符,换行符将不会存储在string对象中。
@.任何存储string的size操作结果的变量必须为string::size_type类型。特别重要的是,不要把size的返回值赋给一个int变量。
string关系操作符
@.如果两个string对象长度不同,且短的string对象与长的string对象的前面部分相匹配,则短的string对象小于长的string对象。
@.如果两个string对象的字符不同,则比较第一个不匹配的字符。
string和字符串字面值的连接
string s1("hello");
string s2("world");
string s3 = s1 + ", "; //ok: adding a string and a literal
string s4 = "hello" + ", "; //error: no string operand
string s5 = s1 + ", " + "world"; //ok: each + has string operand
string s6 = "hello" + ", " + s2; //error: can't add string literals
/*
注:当进行 string 对象和字符串字面值混合连接操作时,
+ 操作符的左右操作数必须至少有一个是 string 类型的
*/
P16:不同的操作系统使用不同的值作为文件结束符。Windows系统下我们按Ctrl+z。Unix系统中,包括 Mac OS-X 机器,通常用 Ctrl+D。
P18:标准库的头文件用尖括号 < > 括起来,非标准库的头文件用双引号 " " 括起来。
第二章 变量和基本类型
P32:C++中,把负值赋给 unsigned 对象是完全合法的,其结果是该负数对该类型的取值个数求模后的值。
所以把 -1 赋给 8 位的 unsigned char,那么结果是 255, 因为 255 是 -1 对 256 求模后的值。
P34:20//decimal十进制
024
//octal 八进制
0x14/0X14
//hexadecimal 十六进制
P36:程序格式化特性:在一行的末尾加一反斜线符号可将此行和下一行当作同一行处理。
std::cout<<"H\ i"<<std::endl; //注意:以上代码 不等于 以下代码的书写 ∵i前面有空格输出 std::cout<<"Hi"<<std::endl;
P39:左值 与 右值
左值:左值可以出现在赋值语句的左边或者右边。(左值表示存储在计算机内存的对象,相当于地址值。 可对左值进行读写操作,主要是写操作)
右值:右值只能出现在赋值的右边。(右值代表真实数据,数据值)
int ia, ib; ib = 0; //计算机取 0 的右值赋值于 ib 的左值 ia = ib; //取 ib 的右值赋给 ia 的左值
P42:初始化 直接初始化 和 复制初始化
int ival(1024); //direct-initialization int ival = 1024; //copy-initialization初始化指创建变量并给它赋初始值, 而赋值则是擦除对象的当前值并用新值代替。
P44:变量初始化规则
内置类型变量初始化:取决于变量定义的位置。在函数体外定义的变量初始化成 0 ,在函数体里定义的内置类型变量不进行自动初始化。
类类型变量的初始化:类通过定义一个或多个构造函数来控制类对象的初始化。
std::string global_str; //global_str = ""; int global_int; //初始值为 0 int _tmain(int argc, _TCHAR* argv[]) { int local_int; //无初始值 std::string local_str; //local_str = ""; cout<<local_str.c_str(); //(输出 查看有没有空格) //. . . return 0; }
P45:声明和定义
变量的定义:用于为变量分配存储空间,还可以为变量指定初始值。(在一个程序中,变量有且只有一个定义)
声明:用于向程序表明变量的类型和名字。
注意:定义也是声明:当定义变量时,我们声明了它的类型和名字。 可以通过使用 extern 关键字声明变量名而不定义它。
extern int i; //declares but does not define i int i; //declares and defines i (global variable)
extern double pi = 3.1416; //definition double pi; //error: redefinition of pi
extern double pi = 3.1416; //definition extern double pi; //ok: declaration not definition extern double pi = 3.1416; //error: redefinition of pi
P50:引用 cosnt 引用
引用与指针的区别:
1.引用必须初始化,而指针不必
2.引用初始化后不能修改,指针可以改变其所指向的对象
3. 不存在指向空值的引用,但是存在指向空值的指针
注意:
1.非 const 引用只能绑定到与该引用同类型的对象。
int i = 42; //legal for const references only const int &r = 42; // int &r = 42; const int &r2 = r + i;2.const 引用则可以绑定到不同不同但相关的类型的对象或绑定到右值。
double dval = 3.14; const int &ri = dval; //编译器会把这些代码转换成如以下形式的编码 int temp = dval; //create temporary int from the double const int &ri = temp; //bind ri to that temporary /* 如果 ri 不是 const, 那么可以给 ri 赋一新值。 这样做不会修改 dval, 而是修改了 temp. 期望对 ri 的赋值会修改 dval 的程序员会发现 dval 并没有被修改。仅允许 const 引用绑定 到需要临时变量作为媒介来完全绑定过程的值,因为 const 引用是只读的。 */
P53:typedef 名字
typedef double wages; //wages is a synonym for double typedef wages salary; //indirect synonym for double wages hourly, weekly; //double hourly, weekly;typedef 通常被用于以下三种目的:
1.为了隐藏特定类型的实现,强调使用类型的目的。
2.简化复杂的类型定义,使其更容易理解。
3.允许一种类型用于多个目的,同时使得每次使用该类型的目的明确。
P57: struct 和 class 的区别
用class 和 struct 关键字定义类的唯一差别在于默认访问级别:默认情况下,struct 的成员为 public,而 class 的成员为 private。
P61: 避免多重包含
#ifndef __SALESITEM_H__ #define __SALESITEM_H__ // Definition of Sales_item class and related functions goes here #endif //__SALESITEM_H__ //或者 #pragma once
第三章 标准库类型
P70:
表3-1 几初始化string对象的方式 |
string s1; 默认构造函数,s1为空串 string s2(s1); 将s2初始化为s1的一个副本 string s3(“value”); 将s3初始化为一个字符串字面值副本 strings4(n, ‘c’); 将s4初始化为字符 ’c’ 的n个副本 |
int main()
{
string s;
cin>>s; //” Hello World! ”
cout<< s <<endl; //”Hello”
return 0;
}
@.读取并忽略开头所有的空白字符(如空格,换行,制表符)。
@.读取字符直至再次遇到空白字符,读取终止。
P72:用getline读取整行文本
int main()
{
string line;
while(getline(cin, line))
cout<<line<<endl;
return 0;
}
@.getline并不忽略行开关的换行符。由于getline函数返回时丢弃换行符,换行符将不会存储在string对象中。
表3-2 string操作 |
s.empty() 如果s为空串,则返回true,否则返回false s.size() 返回s中字符的个数 s 返回s中位置为n的字符,位置从0开始计数 s1 + s2 把s1和s2连接成一个新字符串,返回新生成的字符串 s1 = s2 把s1内容替换成s2的副本 v1 == v2 比较v1与v2的内容,相等则返回true,否则返回false !=,<, <=, > 和 >= 保持这些操作符惯有的含义 |
string关系操作符
@.如果两个string对象长度不同,且短的string对象与长的string对象的前面部分相匹配,则短的string对象小于长的string对象。
@.如果两个string对象的字符不同,则比较第一个不匹配的字符。
string和字符串字面值的连接
string s1("hello");
string s2("world");
string s3 = s1 + ", "; //ok: adding a string and a literal
string s4 = "hello" + ", "; //error: no string operand
string s5 = s1 + ", " + "world"; //ok: each + has string operand
string s6 = "hello" + ", " + s2; //error: can't add string literals
/*
注:当进行 string 对象和字符串字面值混合连接操作时,
+ 操作符的左右操作数必须至少有一个是 string 类型的
*/
相关文章推荐
- C++primer(第四版)复习笔记—第三篇: 类和数据抽象
- C++primer(第四版)复习笔记—第二篇:容器和算法
- C++primer(第四版)复习笔记—第一篇:基本语言
- C++primer中文第四版笔记---多重继承与虚继承
- C++primer 重点总结(important)
- C/C++求职宝典21个重点笔记(常考笔试面试点)
- C++primer学习笔记----面向对象程序设计(1)
- C++primer学习笔记----智能指针
- C++primer学习笔记-----6.6函数匹配
- VC++技术内幕(第四版)笔记(第6章)
- 【个人笔记重点,不作为参考】主题:typescript笔记
- jQuery学习笔记--JqGrid相关操作 方法列表 备忘 重点讲解(超重要)
- CSS——笔记的重点部分
- C++Primer前十二章的一些笔记和总结
- 黑马程序员---OC学习笔记之block访问外部变量【重点面试】
- C++Primer新笔记之----第11章 使用关联容器
- 【个人笔记重点,不作为参考】主题:angular2有关对象的注意事项
- C++Primer 学习笔记 第三章(标准库类型)
- C++primer第五版笔记-第十二章动态内存
- Java编程思想重点笔记(Java开发必看)