本文主要是介绍虚方法——systemverilog,SV,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
引言
类的继承是继承父类的成员变量和成员方法。默认情况下,子类覆盖的方法并不会继承父类的同名方法,只有通过super.method()的方式显式执行,才会达到继承父类方法的效果。
默认情况下,子类中重写的方法对父类是不可见的。子类对象中,即有从父类继承而来的,也有子类扩展的方法和变量。而子类所扩展的方法默认对父类是不可见的。
要想子类重写父类的方法能被父类看到,那就需要虚方法。虚方法就是一个基本的多态结构。
虚方法的作用
在父类中使用virtual定义的方法和函数,父类句柄在指向子类对象时,可以动态索引到子类重写的子类方法。当需要决定调用哪个虚方法时,SV会根据对象的类型,而非句柄的类型决定调用什么方法。
这句话的理解是:即,当父类A定义了一个virtual method(),子类B中重写了方法method()。子类B例化后有个句柄b指向子类对象,将子类句柄b赋值给父类句柄a,即 a = b 。此时父类句柄a指向子类对象,调用a.method(),SV中会有个动态查找的过程,当a句柄看到父类A中的method()是虚方法时,会查找子类中是不是重写了method(),如果子类中也有同名、同参的方法,会直接调用子类中的method(),实现子类对父类方法的继承 。
注意:
- 在为父类定义方法时,如果该方法日后会被覆盖或者继承,那么加virtual;
- virtual只需要声明一次即可,子类可以无需再次声明;
- 虚方法的继承要和父类的参数和返回值类型相同,否则定义的方法不算重写父类方法;
- 虚方法尽量定义在最底层的父类中;
- 不能给成员变量添加virtual,不能用父类句柄找到子类中的成员变量;
这篇关于虚方法——systemverilog,SV的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!