catch子句的次第为什么必须反映类层次

catch子句的次序为什么必须反映类层次?
如题,书上这样说:因为catch子句按出现次序匹配,所以使用来自继承层次的异常的程序必须将它们的catch子句排序,以便派生类型的处理代码出现在其基类类型的CATCH之前。
为什么一定要这样做呢??或者说不这样做会出现什么错误?

------解决方案--------------------
只是猜测,估计你的书说的是这些异常可能都是派生自同一个类的异常类
这样一个异常可能同时是两个类型的实例

class CException1;
class CException2: public CException1;

如果你throw一个CException2异常,那么用CException1也是可以catch的

这样倒不至于导致问题,但是问题是如果你先catch CException1,CException2的异常类永远没有机会去处理异常,而你派生CException1为CException2一定是有特殊目的的,如果CException2永远没有机会被抓到,你的设计目的不就是达不到了

尽管如此,个人不是很喜欢一个非常复杂的异常类型树,因此出现上面这种情况,我觉得是设计者自己给自己找麻烦,你为什么又用CException1也用CException2呢?