当前位置: 代码迷 >> 综合 >> Systemverilog 第九课 面向对象高级编程
  详细解决方案

Systemverilog 第九课 面向对象高级编程

热度:71   发布时间:2023-12-18 22:40:53.0

第九课 面向对象高级编程

new的时候括号可加可不加,如果有参数列表则必须含有括号。

Polymorphism 多态

当类派生出子类时,基类中的一些方法可能需要被重写,对象中的类型来决定调用方法的实现方式,通常这是一个动态的过程,动态的选择方法的方式叫多态。
虚方法(virtual function)的重写与实现就是多态。
例子:
在这里插入图片描述
实方法和虚方法的区别就在于是否有关键字virtual
注意:基类当中如果定义了virtual,子类当中继承的基类即使不加关键字,也会默认认为是虚类
上述例子中,两边第一次display都是打印“This is class A”,第二次display中实方法打印“class A”,虚方法打印“extended class A”
给实类的句柄赋值以后(my_a = my_ea),这个句柄指向自己内部/基类/父类(my_a本身);给虚类的句柄赋值以后(my_a = my_ea),这个句柄指向的是赋值对象/子类(“my_ea”这个值)
(可以将虚类理解为一种指针或者“壳”,调用的都是指向的对象的属性。)

Casting

在这里插入图片描述
b=e1之后不能用e11=b将b指向的e1再赋给e11(语法会报错),只能使用$cast语句强制转换。(那为什么不直接用e11=e1,或者例化一个e11呢?)
cast分为静态转换和动态转换,静态转换包括数据类型和位宽转换等,动态转换包括枚举等。

其它

  • out of block
    Method不仅可以写在class里面,还可以写在外面。
  • local/protected
    local的作用域在类里面,子类都不能使用local的变量;
    protected在类和子类里面可以用,调用时不可以使用。