C++ primer学习笔记
ithzhang
继续向架构师挺进
展开
-
C++ primer第二次阅读学习笔记(第17章:用于大型程序的工具:异常处理)
第十七章:用于大型程序的工具:异常处理现对于小型的软件系统,大规模编程对程序设计语言和程序员的要求更高,它们往往具有以下要求:1:更严格的正常运转时间以及更强壮的错误检测和错误处理。2:运用各种库进行开发。3:能够处理更复杂的应用概念。C++中所具有的异常处理、命名空间和多重继承可以很好的满足这些要求。一:异常处理使用异常处理,程序中独立开发的各部分能够就程序执行期间出原创 2012-05-29 10:22:37 · 2189 阅读 · 0 评论 -
C++ primer第二次阅读学习笔记(第7章:函数)
第七章: 函数调用函数时如果该函数使用非引用的、非const形参,则既可以给函数传递const实参也可以传递非const实参。虽然函数的形参是const int类型的,但是编译器却将该形参定义为普通的int类型,在内部处理中const与非const是没有区别的。编译器在编译时进行检查确保我们不会修改const类型的变量。当传递的实参为大型对象时为了降低传值赋值实参的开销,应该将参数定义原创 2012-05-18 10:09:30 · 2493 阅读 · 0 评论 -
C++ primer第二次阅读学习笔记(第9章: 顺序容器)
第九章 顺序容器顺序容器内的元素按位置进行存储和访问。元素的排列次序与元素值无关,而是由元素添加到容器的次序决定的。标准库定义了三种顺序容器类型:vector,list,deque。它们的差别在于访问元素的方式,以及添加或删除元素相关操作的运行代价。容器仅定义少量操作,大多数额外操作由算法库提供。为了定义容器对象首先要包含相关头文件,如#include,#include,#includ原创 2012-05-20 14:20:19 · 3047 阅读 · 0 评论 -
C++ primer第二次阅读学习笔记(第11章:泛型算法)
第十一章:泛型算法 标准库容器定义的算法很少,而是选择提供一组算法.。泛型是指这些算法不依赖特定的容器类型,可作用在不同类型的容器和不同类型的元素上。不但可以作用在list和vector上还可以作用在内置数组上。 迭代器将算法和容器绑定起来。大多数算法是通过遍历有两个迭代器标记的一段元素来实现其功能。find函数,接受两个迭代器和一个值作为参数,它检查两个迭代器实参标记范围内的每一原创 2012-05-22 20:05:27 · 2118 阅读 · 0 评论 -
C++ primer第二次阅读学习笔记(第10章:关联容器)
第十章:关联容器关联容器和顺序容器的本质差别在于:关联容器通过键存储和读取元素,而顺序元素通过元素在容器中的位置顺序存储和访问元素。虽然关联容器的大部分行为与顺序容器相同,但其独特之处在于支持键的使用。关联容器通过键来高效的查找和读取元素,两个基本的关联容器为map和set。map的元素以键---值对的形式组织,键用作元素在map中的索引,而值表示存储和读取的元素。set仅包含一个键,并有原创 2012-05-21 17:43:02 · 2583 阅读 · 0 评论 -
C++ primer第二次阅读学习笔记(第12章:类)
第十二章:类类的成员可以是数据、函数或类型别名。在类内部声明成员函数是必须的,但是可以不在类内定义。在类内部定义的函数默认为inline。也就是说,当它们被调用时,编译器将试图在同一行内扩展该函数。也可以显式的将成员函数声明为inline。在声明处和定义处指定inline均可。将const加在形参列表后,就可以将成员函数声明为常量,它不能改变其所操作的对象的数据成员,同时const必须原创 2012-05-23 11:04:22 · 2369 阅读 · 0 评论 -
C++ primer第二次阅读学习笔记(第15章:面向对象编程)
第十五章:面向对象编程继承和动态绑定与抽象一起成为面向对象编程的基础。C++中用类进行数据抽象,用派生从一个类继承另一个类,动态绑定是编译器能够在运行时决定,是使用基类中定义的函数还是派生类中定义的函数。面向对象编程的关键思想是多态性。除构造函数以外,任意非static成员函数都可以是virtual函数。继承层次的基类一般都要定义virtual的析构函数。virtual 只能在类内原创 2012-05-25 10:19:30 · 2240 阅读 · 0 评论 -
C++ primer第二次阅读学习笔记(第14章:重载操作符与转换)
第十四章:重载操作符与转换重载操作符必须具有至少一个类类型或枚举类型的操作数,这条规则强制重载操作符不能重新定义用于内置类型对象的操作符含义。重载操作符时使用默认实参是非法的。大多数重载操作符可以定义为普通非成员函数或类的成员函数。作为类的成员重载函数,其形参看起来比操作数数目少1,因为它有一个隐含的this形参,限定为第一个操作数。作为普通函数时,函数的第一、第二个参数分别为操作原创 2012-05-24 11:05:05 · 2611 阅读 · 0 评论 -
C++ primer第二次阅读学习笔记(第13章:复制控制)
第十三章:复制控制如果没有显式定义复制构造函数、赋值操作符,编译器通常为我们定义。复制构造函数是一种特殊的构造函数,具有单个形参,该形参为对该类类型的引用。当定义一个新对象,当将该类型的对象传递给函数或从函数返回该类型的对象时将隐式使用复制构造函数。复制构造函数、赋值操作符和析构函数总称为复制控制。编译器自动实现这些操作,但类也可以定义自己的版本。通常编译器合成的复制控制函数是非常原创 2012-05-23 16:43:28 · 2067 阅读 · 0 评论 -
C++ primer第二次阅读学习笔记(第6章)
第六章在switch中只有在最后一个case或是default语句之后才能定义变量,之所以这样规定是为了避免代码跳过变量定义和初始化。如switch(val){ case xx: break; case yy: int i;//错误,该变量会在块结束之前一直存在,此后的case原创 2012-05-17 14:33:17 · 2392 阅读 · 1 评论 -
C++ primer第二次阅读学习笔记(第5章)
第五章对于两个数的除法和求模,若均为正,则结果均为正。若均为负,除法结果为正,取模的结果为负。若一正一负,则结果依赖于具体编译器。之所以不能串联使用关系操作符如if(i,因为关系操作符具有左结合特性。i首先比较,比较的结果为0或1,然后在与k进行比较,只要k>=1,结果恒为真。对于判断与bool值相等与否,一般都是判断非假,if(val!=false),或是写成if(val),因为原创 2012-05-16 20:30:17 · 1812 阅读 · 0 评论 -
C++ primer第二次阅读学习笔记(第16章:模板与泛型编程) .
第十六章:模板与泛型编程所谓泛型编程就是以独立于任何特定类型的方式编程。使用时,我们需要提供具体程序实例所操作的类型或值。标准库的容器、迭代器和算法都是泛型编程的例子。模板是泛型编程的基础。模板是创建类或函数的蓝图或公式。可以定义自己的函数模板或类模板。函数模板是独立于类型的函数,根据实参类型产生函数特定类型的版本。模板定义以关键字template开始,后接模板形参列表。它是用尖括原创 2012-05-28 11:27:48 · 2725 阅读 · 0 评论 -
C++ primer第二次阅读学习笔记(第17章:用于大型程序的工具:命名空间)
第十七章:用于大型程序的工具:命名空间在一个给定的作用域中定义的每个名字,在该作用域中必须是唯一的。对庞大、复杂的应用程序而言,这个很难满足。由独立开发的库构成的复杂程序更有可能遇到名字冲突,因为库倾向于使用全局名字:模板名、类型名或函数名。命名冲突问题被称为:命名空间污染。命名空间为防止名字冲突,提供了更加可控的机制。命名空间能够划分全局命名空间。一个命名空间是一个作用域,通过在命名空间原创 2012-05-29 11:20:52 · 2081 阅读 · 0 评论 -
C++ primer第二次阅读学习笔记(第17章:用于大型程序的工具:多重继承与虚继承) .
第十七章:用于大型程序的工具:多重继承与虚继承多重继承是从多于一个直接基类派生类的能力。多重继承的派生类继承其所有父类的属性。为了支持多重继承,应扩充派生列表,多个类用逗号分割。如:class panda:public bear,public animal{};注意每个基类都必须制定访问级别。public,private,protected,与单继承一样。多重继承的派生原创 2012-05-29 20:09:36 · 1893 阅读 · 0 评论 -
C++ primer第二次阅读学习笔记(第18章:特殊工具与技术:运行时类型识别、extern。。。)
第十八章:特殊工具与技术:运行时类型识别 通过运行时类型识别(RTTI),程序能够使用基类的指针或引用来检查这些指针或引用所指向对象的实际类型。通过两个操作符提供RTTI: 1:typeid操作符,它返回指针或引用所指对象的实际类型。如typeid(*p); typeid(ref); 2:dynamic_cast操作符,将基类类型的指针或引用安全原创 2012-05-31 15:38:24 · 3879 阅读 · 0 评论 -
C++ primer第二次阅读学习笔记(第4章)
C++语言应尽量使用vector和迭代器类型,应避免使用低级的数组和指针,涉及良好的程序只有在强调速度时才在类实现的内部使用数组和指针。因此要向成为一个真正的C++程序员就要多使用vector和string来替代数组和c风格字符串。数组的维数必须用整型常量指定,非const类型或是到运行时才知道其值的const变量都不能用于定义数组的维数。在没有显式提供元素的初始时数组元素会像普通元素一样原创 2012-05-16 20:24:20 · 2006 阅读 · 0 评论 -
C++ primer第二次阅读学习笔记(第1、2章)
C++ primer第二次阅读学习笔记(第1、2章) 一年前开始了C++primer的第一遍阅读,一年之后重新拾起C++primer。原因有二,一:第一遍阅读时刚开始接触C++,对C++认识有限,学习C++primer不可能有多么深刻的理解,一年的开发让我对C++有了不一样的认识,这时再回过头来查漏补缺。二:想清楚了不考研了,但是这并不代表我甘于做一个普通的程序员,离毕业还有一年的时间,原创 2012-05-15 20:37:54 · 3159 阅读 · 2 评论 -
C++ primer第二次阅读学习笔记(第3章)
第三章 在头文件中应该使用完全限定的标准库名字,如std::cout。而不应该使用using std::cout;或using namespaces std;在头文件中放置using 声明,就相当于在包含该头文件的每个程序中都放置了同一using声明。应该在头文件中包含确实需要的东西,遵守最小权原则。 string是定义在std名字空间的名字。 getline用于读取原创 2012-05-16 20:14:22 · 2054 阅读 · 0 评论 -
.C++ primer第二次阅读学习笔记(第18章:特殊工具与技术:优化内存分配)
第十八章:特殊工具与技术:优化内存分配 C++类型分配是一个类型化操作:new特定类型分配内存,并在新分配的内存中构造对象。new表达式会为每个动态分配的类自动调用构造函数。但有些时候需要将内存分配与对象构造分开,因为对预先分配,但以后却不使用的对象进行构造很是浪费的。内存分配和对象构造紧密纠缠,就像对象析构和内存回收一样。new表达式分配内存并在该内存中构造一个对象,delete表达原创 2012-05-30 18:20:35 · 2731 阅读 · 0 评论