【C++ Primer】学习笔记
allenshi_szl
大道至简
展开
-
第5章 表达式
操作符%,该操作符的操作数只能为整型。只有在必要时才使用后置操作符。因为前置操作符需要做的工作更少,只需加1后的结果即可。而后置操作符则必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果。后自增操作的优先级高于解引用操作。前自增操作符和解引用操作符的优先级相同。*iter++等效于*(iter++)对数组做sizeof操作等效于将对其元素类型做sizeof操原创 2009-07-16 12:45:00 · 381 阅读 · 0 评论 -
第16章 模板与泛型编程
面向对象编程所依赖的多态性称为运行时多态性,泛型编程所依赖的多态性称为编译时多态性或参数式多态性。模板形参可以是表示类型的类型形参,也可以是表示常量表达式的非类型形参。与调用函数模板形成相比,使用类模板时,必须为模板形参显式指定实参。模板形参由关键字class或typename后接说明符构成,这两个关键字具有相同的含义。类型形参的实参的受限转换:const转换:原创 2009-09-23 10:03:00 · 525 阅读 · 0 评论 -
第15章 面向对象编程
派生类中的虚函数可以返回基类函数所返回类型的派生类的引用或指针。只有指定为虚函数的成员函数才能进行动态绑定。派生类可以进一步限制但不能放松对所继承的成员的访问。使用private或protected派生的类不继承基类的接口,称为实现继承。使用class保留字定义的派生类默认具有private继承,而用struct保留字定义的类默认具有public继承。友元关原创 2009-09-21 18:11:00 · 412 阅读 · 0 评论 -
第14章 重载操作符与转换
重载操作符必须具有至少一个类类型或枚举类型的操作数。这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义。赋值(=),下标([]),调用(())和成员访问箭头(->)等操作符必须定义为成员。复合赋值操作符通常定义为类的成员。改变对象状态或与给定类型紧密联系的其他一些操作符,如自增,自减和解引用,通常定义为类成员。对称的操作符,如算术操作符、相等操作符、关系操作符和位原创 2009-09-17 12:08:00 · 399 阅读 · 0 评论 -
第12章 类
把关键字const加在形参表之后,就可以将成员函数声明为常量,const成员不能改变其所操作的对象的数据成员。如果类是用struct关键字定义的,则在第一个访问标号之前的成员是公有的;如果类是用class关键字定义的,则这些成员是私有的。可以声明一个类而不定义它,称为不完全类型。不完全类型只能用于定义指向该类型的指针及引用,或者用于声明使用该类型作为形参类型或返回类型的函数原创 2009-09-15 12:08:00 · 358 阅读 · 0 评论 -
第13章 复制控制
复制构造函数:只有单个形参,而且该形参是对本类类型对象的引用(常用const修饰)。如果一个类拥有指针成员,或者在复制对象时有一些特定工作要做,则该类需要复制构造函数。为了防止复制,类必须显示声明其复制构造函数为private。如果想要连友元和成员中的复制也禁止,就可以声明一个(private)复制构造函数但不对其定义。三法则:如果一个类需要析构函数,则该类几乎也必然需要定义自原创 2009-09-16 10:32:00 · 416 阅读 · 0 评论 -
第11章 泛型算法
泛型算法本身从不执行容器操作,只是单独依赖迭代器和迭代器操作实现。算法从不直接添加或删除元素。back_inserter函数是迭代器适配器,迭代器适配器使用一个对象作为实参,并生成一个适应其实参行为的新对象。谓词是做某些检测的函数,返回用于条件判断的类型,指出条件是否成立。三种插入迭代器的区别在于插入元素的位置不同。back_inserter,使用push_back原创 2009-09-10 17:21:00 · 381 阅读 · 0 评论 -
第4章 数组和指针
在函数体外定义的内置数组,其元素均初始化为0;在函数体内定义的内置数组,其元素无初始化;除非显示地提供元素初值,否则内置类型的局部数组的元素没有初始化。字符串字面值包含一个额外的空字符(null)用于结束字符串。用下标访问元素时,vector使用vector::size_type作为下标的类型,而数组下标的则是size_t。指针是用于数组的迭代器。区别:指针用于指向原创 2009-07-09 18:38:00 · 533 阅读 · 0 评论 -
第3章 标准库类型
空白字符的处理string类型的输入操作符:读取并忽略有效字符(非空白字符)之前所有的空白字符,然后读取字符直至再次遇到空白字符,读取终止(该空白字符仍留在输入流中)。读前丢弃空白字符。getline函数:不忽略行开头的空白字符,读取字符直至遇到换行符,读取终止并丢弃换行符(换行符从输入流中去掉但并不存储在string对象中)。读后丢弃换行符。size_type类型:unsigne原创 2009-07-08 16:19:00 · 448 阅读 · 0 评论 -
第10章 关联容器
关联容器通过键存储和读取元素,顺序容器通过元素在容器中的位置顺序存储和访问元素。关联的本质在于元素的值与某个特定的键相关联,而并非通过元素在数组中的位置来获取。对键类型,唯一的约束就是必须支持value_type是pair类型,它的值成员可以修改,但键成员不能修改。使用下标访问map对象,访问不存在的元素将导致在map容器中添加一个新的元素,它的键即为该下标值,不同原创 2009-09-09 17:48:00 · 376 阅读 · 0 评论 -
第9章 顺序容器
所有的容器都是类模板。接受容器大小做形参的构造函数只适用于顺序容器,而关联容器不支持这种初始化。引用不支持一般意义的赋值运算,因此没有元素是引用类型的容器。IO类型不支持复制或赋值,也不能做容器元素类型。在指定容器元素为容器类型时,必须使用空格。vector > lines; //ok:space required between closevector和d原创 2009-08-17 17:22:00 · 540 阅读 · 0 评论 -
第2章 变量和基本类型
多行字面值(/):在一行的末尾加一反斜线符号可将此行和下一行当作同一行处理。 左值(lvalue):左值可以出现在赋值语句的左边或右边。右值(rvalue):右值只能出现在赋值的右边,不能出现在赋值语句的左边。 C++支持两种初始化变量的形式:复制初始化(copy-initialization)和直接初始化(direct-initialization)。复制初始化语法用等号(=原创 2009-06-10 09:18:00 · 443 阅读 · 0 评论 -
第8章 标准IO库
IO对象不可复制或赋值。形参或返回类型不能为流类型。如果需要传递或返回IO对象,则必须传递或返回指向该对象的指针或引用。ofstream &print(ofstream&); //ok:take a reference, no copywhile (print(out2)) { /*.....*/ } //ok:pass reference to out2输出缓冲区的刷新co原创 2009-08-14 15:38:00 · 369 阅读 · 0 评论 -
第7章 函数
可以将指向const对象的指针初始化为指向非const对象,但不可以让指向非const对象的指针指向const对象。如果函数使用非引用的非const形参,则既可以给该函数传递const实参,也可传递非cosnt的实参。如果函数具有普通的非const引用形参,则显然不能通过const对象进行调用。非const引用形参只能与完全同类型的非const对象关联。应该将不需要修改的引原创 2009-08-10 15:56:00 · 385 阅读 · 0 评论 -
第17章 用于大型程序的工具
抛出指针通常是个坏主意:抛出指针要求在对应处理代码存在的任意地方存在指针指向的对象。栈展开:沿嵌套函数调用链继续向上,直至为异常找到一个catch子句。栈展开期间,释放局部对象所用的内存并运行类类型局部对象的析构函数。带有因继承而相关的类型的多个catch子句,必须从最低派生类型到最高派生类型排序。重新抛出虽然不指定自己的异常,但仍然将一个异常对象沿链向上传递,被抛出的原创 2009-09-23 14:27:00 · 384 阅读 · 0 评论