zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【SystemVerilog 之 进阶内容(向UVM过渡)】~ 类型转换、虚方法、对象拷贝、回调函数、参数化的类

方法对象 函数 参数 内容 进阶 拷贝 回调
2023-09-14 09:10:01 时间

1. 类型转换

1.1 概述

在这里插入图片描述

1.2 动态转换

之前我们已经接触过静态转换了,我们接下来看一下动态转换。
在这里插入图片描述

1.2.1 子类句柄赋值于父类句柄

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
答案:A,调用的是父类的方法
解析:因为tr的类型是父类,所以就算是子类句柄赋值与它,那它能够访问的范围也只有父类本身。

1.2.2 父类句柄赋值于子类句柄

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
答案:B,调用的是子类的方法
解析:通过cast之后父类句柄指向子类句柄之后,可以访问子类的方法。

练习

在这里插入图片描述
答案:ABC
解析:D错误,动态转换失败会返回0,所以是有提示的。

2. 虚方法

2.1 概述

在这里插入图片描述

2.2 非虚函数的调用

在这里插入图片描述
在这里插入图片描述
从上图可以发现,父类中test方法为 非虚方法,所以子类句柄赋值与父类句柄,之后先调用子类的test方法,打印结果是子类的test方法;随后调用父类句柄的test方法,结果只打印父类test方法。

2.3 虚函数的调用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4 新手建议

在这里插入图片描述

2.5 练习

在这里插入图片描述
答案:A
解析:B错误,混淆概念,虚方法讲的是多态,而super讲的是继承,不一样的;C错误,虚方法顾名思义只对方法起作用,如果父类句柄指向子类句柄,可以动态绑定成员方法,而不可以绑定成员变量;D错误,继承必须是同名同参同类型,这也是继承的要求,和多态不能混淆。

3. 对象拷贝

3.1 区别 ”两种方式“

在这里插入图片描述

3.1.1 指向同一个对象

在这里插入图片描述
在这里插入图片描述

3.1.2 浅拷贝

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
答案:$cast(h, t);
在这里插入图片描述

3.2 概述

在这里插入图片描述

3.3 小结

在这里插入图片描述

4. 回调函数

4.1 概述

在这里插入图片描述

4.2 使用流程

4.2.1 预留回调函数的入口

在这里插入图片描述

4.2.2 定义回调的类以及类中的各个函数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.2.3 例化并且添加回调类的实例

在这里插入图片描述

练习

在这里插入图片描述
答案:ABCD

5. 参数化的类

5.1 概述

在这里插入图片描述

5.2 举例说明

实现一个简化的mailbox
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

练习

在这里插入图片描述
答案:ABD
解析:C错误,不可以随意转换。

声明

本人所有系列的文章,仅供学习,不可商用,如有侵权,请告知,立删!!!

本人主要是记录学习过程,以供自己回头复习,再就是提供给后人参考,不喜勿喷!!!

如果觉得对你有用的话,记得收藏+评论!!!