0. 介绍

sv中引入了OPP(面向对象),也会有类似于C++里的override和overload考虑,目前sv不支持class的overload。

1. override(重写)

override分为数据成员override和方法override。Systemverilog———override和virtual methods

父类句柄指向的数据成员永远是父类的成员。

如果通过父类句柄调用子类中重写的成员函数,那么需要将父类中成员函数定义成virtual类型。

2. virtual method(虚方法)

带有虚方法的类称为多态类。

  • 类中的方法在定义的时候可以通过添加virtual关键字来声明一个虚方法,virtual method是一个基本的多态性结构
  • virtual method为具体的实现提供了一个原型,也就是在派生类中,重写该方法的时候必须采用一直的参数和返回类型。
  • virtual method可以重写基类中所有的方法,但是普通的方法被重写后只能在本身及其派生类中有效。
  • 每个类的继承关系中只有一个虚方法的实现,是在最后一个派生类中。Systemverilog———override和virtual methods

 

       Systemverilog———override和virtual methods

  • 在P1指向P2后,当P1.printA被调用时,程序会调用访问内存中类对象P2中的P1部分,而此时发现printA是一个普通方法,因此直接调用并结束访问。 
  • 在P1指向P2后,当P1.printB被调用时,程序同样找到类对象P2中的P1部分,此时发现printB是virtual method(虚方法),这是程序会查看这个P2在定义的时候是否重写了该方法,如果重写程序就会直接调用P2重写的实现,否则调用基类中的PrintB。

注:对一个virtual函数,被调用时是由这个指针指向的对象的决定,而不是指针的类型决定;virtual函数被调用时,则是由指针类型决定的。

 

 

 

相关文章:

  • 2022-01-09
  • 2021-11-15
  • 2021-10-13
  • 2022-02-20
  • 2022-01-27
  • 2022-12-23
  • 2021-06-02
猜你喜欢
  • 2022-12-23
  • 2021-12-21
  • 2021-11-17
  • 2021-08-14
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案