初学阶段用多态理解异常处理,核心是将异常类型视为可扩展对象、捕获行为变为可复用逻辑;通过继承体系(如dividebyzeroexception等继承baseexception)、虚函数handle()实现统一捕获与差异化处理,体现“同一接口、不同实现”。

初学阶段用多态来理解异常处理的执行脉络,核心是把“异常类型”看作一类可扩展的对象,把“捕获行为”变成可复用、可替换的逻辑。不是先背语法,而是借助多态的天然结构,看清异常从抛出到处理的完整路径。
用继承关系映射异常发生的位置层级
把不同错误场景封装成子类(如 DivideByZeroException、ArrayIndexOutOfBoundsException),都继承自一个基类 BaseException。这样,函数里 throw 的不再是原始值(比如字符串或整数),而是具体异常对象。调用链中每层函数不需关心具体错在哪,只管向上抛——因为所有子类对象都能被父类引用接收,就像 f1 → f2 → f3 这样的调用链,异常自动沿栈帧向上传递,无需手动返回错误码或层层检查。
用虚函数统一入口,区分处理逻辑
在基类 BaseException 中定义纯虚函数 handle() 或 printMessage()。每个子类重写它,实现自己的响应方式:除零异常可能记录日志并提示重试,数组越界则打印上下文索引和容量。这样,catch 块只需写一次 catch(BaseException& e),再调用 e.handle(),就能触发对应子类的实际处理——不用写一堆 if-else 判断异常类型,也不用维护多个 catch 分支。
用父类引用捕获,体现“向上兼容”的执行流
try 块内无论哪个函数抛出 FileOpenException 还是 MemoryAllocException,只要它们同属一个异常继承体系,一个 catch(BaseException&) 就能接住。这清晰展示了异常处理的三个关键阶段:抛出点(子类实例生成)→ 传递路径(沿调用栈自动上浮)→ 捕获点(父类引用统一接收)。整个过程不依赖具体类型,只依赖继承关系和虚函数机制,正好呼应多态“同一接口、不同实现”的本质。
配合 try-catch 看清控制流跳转时机
在代码中观察:throw 一执行,try 块立刻中断,不再运行后续语句;程序直接跳到匹配的 catch 块开头。这时候如果 catch 参数是父类引用,而实际抛出的是子类对象,就完成了典型的“父类引用指向子类对象”——多态生效的瞬间。之后调用虚函数,执行的正是子类重写的版本。这种跳转+绑定的过程,就是异常生命周期与多态机制协同工作的直观体现。











