推荐答案
测试一下
题目
4.1 虚方法
参考答案与知识点
参考答案
要确保基类句柄调用扩展类对象的方法时不会调用基类的方法,核心机制是使用虚方法(virtual method)实现多态。具体做法:在基类中将需要被重写的方法声明为 virtual(SystemVerilog)或类似关键字(如C++中的virtual、Java中的普通方法默认虚),然后在扩展类中使用 override 关键字(SystemVerilog)或同名方法覆盖。这样,当基类句柄指向扩展类对象时,方法调用会进行动态绑定(运行时绑定),根据对象实际类型调用扩展类的实现,而非基类的版本。如果没有虚方法,默认是静态绑定,基类句柄只能调用基类方法,即使对象是扩展类类型,也无法触发扩展类的方法。此外,需注意:基类中的方法必须显式声明为虚,子类重写时建议显式使用 override,以避免拼写错误或未覆盖的问题。在某些语言中(如Java),非静态方法默认就是虚的,无需额外关键字,但SystemVerilog需要显式声明。通过类型转换(downcast)也可以调用扩展类特有方法,但虚方法机制是运行时多态的标准方式。易错点:忘记在基类加virtual,导致静态绑定;或者子类重写时方法签名不一致(参数或返回类型不同)导致覆盖失败。
涉及知识点
- 虚方法定义与声明
- 动态绑定与静态绑定
- 多态实现原理
- override关键字使用
- 基类句柄与扩展类对象