这部分涵盖了一些高级主题,主要包括:异常处理、命名空间和多重继承以及特殊工具与技术。
17、用于大型程序的工具
C++语言包含的一些特征在问题比较复杂、非个人所能管理时最为有用。本章的主题就是这些特征,即异常处理、命名空间和多重继承。
一、异常处理
使用异常处理,程序中独立开发的各部分能够就程序执行期间出现的问题相互通信,并处理这些问题,程序的一个部分能够检测出本部分无法解决的问题,这个问题检测部分可以将问题传递给准备处理问题的其他部分。
1、通过异常我们能够将问题检测和问题的解决分离,这样程序的问题检测部分可以不必了解如何处理问题。
2、举例
如果操作数的isbn成员不匹配,Sales_item的加操作符可以抛出一个异常:
程序中将Sales_item对象相加的那些部分可以使用一个try块,以便在异常发生时捕获异常:
二、命名空间
命名空间为防止名字冲突提供了更加可控的机制,命名空间能够划分全局命名空间,这样使用独立开发的库就更加容易了。
1、命名空间的定义:以关键字namespace开始,后接命名空间的名字
2、每个命名空间是一个作用域,定义在命名空间中的实体称为命名空间成员,在命名空间中定义的名字可以被命名空间中的其他成员直接访问,命名空间外部的代码必须指出名字定义在哪个命名空间中:
3、可以利用using声明来从命名空间外部使用命名空间成员
4、命名空间可以是不连续的:与其他作用域不同,命名空间可以在几个部分中定义,命名空间由它的分离定义部分的综合构成,命名空间是累积的。
5、嵌套命名空间
6、未命名的命名空间
命名空间可以是未命名的,未命名的命名空间在定义时没有给定名字。未命名的命名空间以关键字namespace开头,接在关键字namespace后面的是由花括号定界的声明块。
未命名的命名空间中定义的名字可以在定义该命名空间所在的作用域中找到,如果在文件最外层作用域中定义未命名的命名空间 ,那么,未命名的命名空间中的名字必须与全局作用域中定义的名字不同:
三、多重继承
多重继承是从多于一个直接基类派生类的能力,多重继承的派生类继承其所有父类的属性。
1、定义多个类
四、虚继承
虚继承是一种机制,类通过虚继承指出它希望共享其虚基类的状态,在虚继承下,对给定虚基类,无论该类在派生层次中作为虚基类出现多少次,只继承一个共享的基类子对象,共享的基类子对象称为虚基类。
1、举例:istream和ostream类对它们的基类进行虚继承,通过使基类称为虚基类,istream和ostream指定,如果其他类同时继承它们两个,则派生类中只出现它们的公共基类的一个副本。通过在派生列表中包含关键字virtual设置虚基类。
2、无论虚基类出现在继承层次中任何地方,总是在构造非虚基类之前构造虚基类:
例如下面的继承层次,构造函数调用的次序为:ZooAnimal(),ToyAnimal(),Character(),BookCharacter(),Bear(),TeddyBear().