C++ Primer 笔记
C++ Primer笔记.有错误的地方欢迎指正..谢谢!
如果想要看更多关于STL与泛型算法.请移步至:http://blog.csdn.net/column/details/cpp-stl.html
谢谢!
yuanweihuayan
准备研究发布windows内核相关文章
展开
-
第十八章:特殊工具与技术
1. new基于每个对象分配内存的事实可能会对某些类强加不可接受的运行时开销,这样的类可能需要使用户级的类类型对象分配能够更快一些.这样的类使用的通用策略是,预先分配用于创建新对象的内存,需要时在预先分配的内存中构造每一个新对象. 对于未构造的内存中的对象进行赋值而不是初始化,其行为是未定义的.对许多类而言,这样做引起运行时的崩溃.赋值设计删除现存对象,如果没有现存对象,赋值操作符中的动作就会原创 2011-06-14 20:15:00 · 1266 阅读 · 1 评论 -
第17章:用于大型程序的工具
1. 独立开发的库几乎不可避免的使用彼此相同的名字,一个库中定义的名字可能会与其他库中的相同名字冲突.为了避免冲突,可以将名字定义在namespace中.2. 通过异常.我们能够将问题的检测和问题的解决分离,这样程序的问题检测部分可以不必了解如何处理问题. 有效使用异常处理需要理解: ■ 在抛出异常时会发生什么 ■ 在捕获异常时又会发生什么 ■ 用来传递错误原创 2011-06-12 23:02:00 · 1242 阅读 · 0 评论 -
第十六章:模版与泛型程序设计
1. 所谓泛型程序设计就是以独立于任何特定类型方式编写的代码.使用泛型程序时,我们需要提供具体程序实例所做的类型和值.并且依赖于某种形式的多态性. 面向对象程序设计中的多态性在运行时应用于存在继承关系的类,我们能够编写使用这些类的代码,忽略基类和派生类之间类型上的差异 另外面向对象程序设计所依赖的多态性称为运行时的多态性,泛型程序设计所依赖的多态性称为编译时多态性或者原创 2011-06-02 22:26:00 · 2279 阅读 · 4 评论 -
第十五章:面向对象编程
<br />1. 在C++中,通过基类的引用(或者指针)调用虚函数时,反生动态绑定.引用(或者指针)既可以指向基类对象,也可以指向派生类对象,这一事实是动态绑定的关键.用引用调用的虚函数在运行时确定,被调用的函数是引用(或者是指针)所指对象的实际类型所定义.(保留字只能在类的内部声明中,定义中不能有)<br /> 2. 基类应该将派生类需要重定义的任意函数定义为虚函数 <br />3. 可以认为protected访问标号是private和public的混合:<br /> ● 像private成员原创 2011-05-09 22:54:00 · 1136 阅读 · 0 评论 -
第十四章:重载操作符与转换
<br />1. 重载操作符需要注意的问题:<br />◆ 不能通过连接其他合法符号来创建任何新的操作符.<br />◆ 用于内置类型的操作符,其含义不能改变.<br />◆ 重载操作符必须具有至少一个类类型或者枚举类型的操作数.这条规则强制重载操作符不能重新定义用于内置类型对象的操作符的含义<br />◆ 优先级和结合性是固定的.除了函数调用操作符operator()之外,重载操作符时使用默认实参是非法的.<br />◆ 不再具有短路求值特性(尤其是and,or和逗号表达式)<br原创 2011-04-27 21:51:00 · 1172 阅读 · 0 评论 -
第十三章:复制控制
1. 复制构造函数是一种特殊的构造函数,具有单个形参(常用const来修饰)是该类类型的引用.当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式使用复制构造函数.当将该类型的对象传递给函数返回该类型的对象时,将隐式使用复制构造函数.2. 不管是否定义了自己的析构函数,编译器都自动执行类中非static数据成员的析构函数3. 复制构造函数可用于原创 2011-04-24 21:31:00 · 1120 阅读 · 0 评论 -
第十二章:类
<br />1. 在类内部定义的函数默认为inline,另外将const加在形参表之后,此时的函数不能改变其所操作的对象的数据成员.并且在声明和定义处都要加上const.<br />2. 成员的默认访问属性取决于类是通过何种方式定义的,用struct定义的类其成员都是公共的,用Class定义的类其成员默认是私有的<br />3. 数据抽象和封装提供了两个重要优点:<br />◆避免类内部出现无意的,可能破坏对象状态的用户级错误<br />◆随时间推移可以根据需要改变或缺陷原创 2011-04-10 21:38:00 · 1009 阅读 · 0 评论 -
第十一章:泛型算法
<br />1. 在大多数情况下,每个算法都需要使用(至少)两个迭代器来指出该算法操纵的元素范围,第一个迭代器指向第一个元素,而第二个迭代器则指向最后一个元素的下一个位置.第二个迭代器(有时也被称为超出末端迭代器)所指向的元素本身不是要操作的元素,而被用作终止遍历的哨兵.<br />2. 算法永不执行容器提供的操作;泛型算本身从不执行容器的操作,只是单独依赖迭代器和迭代器操作的实现<br />3. 泛型算法必须包含: #include <algorithm><br />原创 2011-04-06 22:09:00 · 1071 阅读 · 0 评论 -
第十章:关联容器
<br />1.关联容器和顺序容器的本质区别在于:关联容器通过键值(KEY)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素.<br />2.pair类型提供的主要操作:<br />1).pair<T1,T2>p1 创建一个空的pair的类型<br />2).pair<T1,T2>p1(v1,v2) 将p1.first=v1,p1.second=v2并创建pair对象<br />3).make_pair(v1,v2)原创 2011-03-27 21:52:00 · 1119 阅读 · 0 评论 -
第九章:顺序容器
1. 顺序容器包括 接受容器大小做形参的构造函数只是用于顺序容器,而关联容器不支持这种初始化.2.C++中,大多数类型都可用作容器的元素类型.容器元素类型必须满足以下两个约束: 1).元素类型必须支持赋值运算 2).元素类型的对象必须可以复制注:没有元素是引用类型的容器,也没有元素是IO类型的容器3.使用迭代器编写程序时,必须留意那些操作会使迭原创 2011-03-27 21:43:00 · 1590 阅读 · 0 评论 -
第八章:标准IO库
<br />1.IO类型在三个独立的头文件中定义:iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,而sstream定义的类型则用于读写存储在内存中的string对象.<br /><br />2.IO对象不可复制或赋值,即表明<br />①无法将其存储在容器中<br />②形参或返回类型也不能为流类型,如果要传递或返回IO对象,则必须传递或返回指向该对象的指针或引用<br />3. IO标准库管理一系列条件状态成员,用来标记给定IO对象是否处于可用状态,或者碰到了哪种特定的错误原创 2011-03-19 22:00:00 · 1103 阅读 · 0 评论 -
第七章:函数
1.如果使用引用形参的唯一目的是避免赋值实参,则将形参定义为const引用.2.应该将不需要修改的引用形参定义为const引用.普通的非const引用形参在使用时不太灵活,这样的形参既不能用const对象初始化,也不能用字面值或产生右值的表达式参数实例化.3.通常函数不应该有vector或者其他的标准库容器类型的形参.C++倾向通过传递指向容器中需要处理的元素的迭代器来传递容器.4.当编译器检查数组形参关联的实参时,它只会检查实参是不是指针、指针的类型和数组元素的类型是否匹配,而不会检查数组的长度.5.如果原创 2011-03-17 22:46:00 · 1043 阅读 · 0 评论 -
第六章:语句
<br />1.使用switch-case语句时要注意:表达式必须是产生一个正数结果,其值与每个case的值比较.<br />2.在循环条件中定义的变量在每次循环里都要经历创建和撤销的过程<br />3.break语句用于结束最近的while、do-while、for或switch,并将程序的执行权传给紧接着在被终止语句之后的语句.<br />例子: <br />int i = 5;<br /> while (i)<br /> {<br /> swi原创 2011-03-15 22:10:00 · 881 阅读 · 0 评论 -
第五章:表达式
<br />1.如果求模的结果随分子的符号,则取出来的值向零一侧值,反正向负无穷取值.<br />2.左移操作符(<<)在右边插入0以补空位.对于右移操作符,如果其操作数是无符号数,则从左边插入0,如果操作叔叔有符号数,则插入符号位的副本或0值,如何选择需依据具体的实现而定. <br />3.与下标和解引用操作符一样,赋值操作符也返回左值.(if (i = 1)和if(i== 1)的区别 <br />4.自增运算符记住一个例子: i = (i++) + a + b;<br />5常见的几种与动态内存相关的错原创 2011-03-15 20:06:00 · 904 阅读 · 0 评论 -
第四章:数组和指针
1.使用字符串的字面值来初始化创建的新数组时,将在新的数组中加入空字符.2.引用与指针的区别:①引用总是指向某个对象:定义没有初始化的引用是错误的.②给引用赋值修改的是该引用所关联的值,而并不是使引用与另一对象相关联3.在C++中,强制要求指向const对象的指针也要有const特性,另外,不能使用void*指针保存const对象的地址,而必须使用const void*类型的指针保存const对象的地址4.typedef string* pstring;const pstring原创 2011-03-12 11:59:00 · 970 阅读 · 0 评论 -
第三章:标准库类型
1.使用string类型的对象时须包含的头文件: #include using std::string;istream& getline(istream input,string line)//注意,这里直接是把常用的写出来,其实该函数的原型并不是这样子,具体的使用和声明看查看MSDN.该原创 2011-03-09 22:15:00 · 1236 阅读 · 0 评论 -
第二章:变量和基本类型
1.一般的,short类型为半个机器字长,int类型为一个机器字长,而long类型为一个货两个机器字长(在32位机器中int类型和long类型通常的字长是相同的)2.当我们试着把一个超出其取值范围的值赋给一个指定类型的对象时:■对于unsigned类型来说,编译器通过调整越界值使其满足要求.编译器会是该值对unsigned类型的可能取值的数目求模,然后取所得值;■对于signed类型与unsigned基本一致.3.一般float类型用一个字(32位)来表示,double类型用两个字(64位)来表示,long原创 2011-03-08 22:38:00 · 1303 阅读 · 0 评论 -
第一章:快速入门
1.在C++中,每个表达式都会产生一个结果,通常是将操作符作用到其操作数所产生的值.当操作符是输出操作符时,结果是左操作数的值.也就是说,输出操作返回的值是输出流本身; 2.定义变量时要初始化变量; 3编译器需要检查出的错误有: ■语法错误 ■类型错误 ■声明错误 4.当我们使用istream对象作为条件,结果是返回的测试流的状态.如果流是有效的,那么测试成功.遇到文件结束符或遇到无效的输入时,如读取了一个不是整数的值,则istream对象是无效的.处于无效状态的istream对象将导致条件失败 Windo原创 2011-03-06 20:42:00 · 1389 阅读 · 0 评论