摘要: 友元使得能够为类开发更灵活的接口。类可以将其他函数、其他类和其他类的成员函数作为友元。在某些情况下,可能需要前向声明,需要特别注意类和方法声明的顺序,以正确地组合友元。潜逃类是在其他类中生命的类,它有助于设计这样的助手类,即实现其他类,单必须是共有接口的组成部分。C++机场机制为处理拙劣的编程事件, 阅读全文
posted @ 2016-07-14 17:20 月光诗人 阅读(225) 评论(0) 推荐(0) 编辑
摘要: C++相对C更严格地限制允许的类型转换,并添加4个类型转换运算符,是转换过程更规范:* dynamic_cast;* const_cast;* static_cast;* reinterpret_cast。【dynamic_cast运算符】假设High和Low是两个类,而ph和pl的类型分别是Hig 阅读全文
posted @ 2016-07-14 17:11 月光诗人 阅读(263) 评论(0) 推荐(0) 编辑
摘要: 运行时类型识别RTTI(Runtime Type Identification)C++有三个支持RTTI的元素。* 如果可能的话,dynamic_cast运算符将使用一个指向基类的指针来生成一个指向派生类的指针;否则,该运算符返回0——空指针。* typeid运算符返回一个指出对象的类型的值。* t 阅读全文
posted @ 2016-07-14 16:25 月光诗人 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 通常,引发异常的函数将传递一个对象。这样做的重要有点之一是,可以使用不同的异常类型来区分不同的函数在不同情况下引发的异常。另外,对象可以携带信息,程序员可以根据这些信息来确定引发异常的原因。同时,catch块可以根据这些信息来决定采取什么样的措施。下面的两个程序用语言是这个效果。如果函数hmean( 阅读全文
posted @ 2016-07-14 15:11 月光诗人 阅读(793) 评论(0) 推荐(0) 编辑
摘要: C++异常是丢程序运行过程中发生的异常情况(例如被0除)的一种响应。异常提供了将控制权从程序的一个部分传递到另一部分的途径。对异常的处理有3个组成部分:* 引发异常;* 使用处理程序捕获异常;* 使用try块。程序在出现问题时将引发异常。throw语句实际上是跳转,即命令程序跳到另一条语句。thro 阅读全文
posted @ 2016-07-14 14:45 月光诗人 阅读(684) 评论(0) 推荐(0) 编辑
摘要: 一种比异常终止更灵活的方法是,使用函数的返回值来指出问题。例如,ostream类的get(void)成员ASCII码,但到达文件尾时,将返回特殊值EOF。对hmean()来说,这种方法不管用。任何树脂都是有效的返回值,因此不存在可用于指出问题的特殊值。在这种情况下,可使用指针参数或引用参数来将值返回 阅读全文
posted @ 2016-07-14 14:26 月光诗人 阅读(3783) 评论(0) 推荐(0) 编辑
摘要: 以一个计算两个数的调和平均数的函数为例。两个数的调和平均数的定义是:这两个数倒数的平均值的倒数,因此表达式为:1.0 * x * y / (x + y)如果y是x的负值,则上述公式将导致被零除——一种不允许的运算。对于被零除的情况,很多新式编译器通过生成一个表示无穷大的特殊浮点值来处理,cout将这 阅读全文
posted @ 2016-07-14 14:11 月光诗人 阅读(14823) 评论(0) 推荐(0) 编辑
摘要: 在下面的程序中,我们创建了一个模板类用于实现Queue容器的部分功能,并且在模板类中潜逃使用了一个Node类。queuetp.h 这里,Node是利用通用类型Item类定义的。所以,下面的声明将导致Node被定义成用于存储double值:QueueTp<double> dq;而下面的声明将导致Nod 阅读全文
posted @ 2016-07-14 13:48 月光诗人 阅读(8466) 评论(0) 推荐(0) 编辑
摘要: C++提供了集中重用代码的手段。第13章介绍的共有继承能够建立is-a关系,这样派生类可以重用基类的代码。私有继承和保护继承也使得能够重用基类的代码,单建立的是has-a关系。使用私有继承时,积累的公有成员和保护成员将称为派生类的私有成员;使用保护继承时,积累的公有成员和保护成员将称为派生类的保护成 阅读全文
posted @ 2016-07-14 12:46 月光诗人 阅读(411) 评论(0) 推荐(0) 编辑
摘要: 15.1.1 友元类假定需要编写一个模拟电视机和遥控器的简单程序。决定定义一个Tv类和一个Remote类,来分别表示电视机和遥控器。遥控器和电视机之间既不是is-a关系也不是has-a关系。事实上,遥控器可以改变电视机的状态,这表明应将Remote类作为Tv类的一个友元。首先定义Tv类:友元声明可以 阅读全文
posted @ 2016-07-14 11:19 月光诗人 阅读(253) 评论(0) 推荐(0) 编辑
摘要: 14.4.1 定义类模板下面以第10章的Stack类为基础来建立模板。原来的类声明如下:typedef unsigned long Item;class Stack{private: enum {MAX = 10}; // constant specific to class Item items[ 阅读全文
posted @ 2016-07-14 09:35 月光诗人 阅读(585) 评论(0) 推荐(0) 编辑
摘要: 多重继承(MI)描述的是有多个直接基类的类。与单继承一样,共有MI表示的也是is-a关系。例如,可以从Awiter类和Singer类派生出SingingWaiter类:class SingingWaiter : public Waiter, public Singer {...};MI可能会给程序员 阅读全文
posted @ 2016-07-14 06:34 月光诗人 阅读(584) 评论(0) 推荐(0) 编辑