当前位置:网站首页>SV 类的虚方法 多态
SV 类的虚方法 多态
2022-08-05 00:13:00 【Bunny9__】
SV 类的虚方法 多态 类型转换
概述
- 类的成员方法可以加修饰词
virtual(虚方法) - 虚方法是一种基本的多态结构
- 一个虚方法可以覆盖基类的同名方法
- 在父类和子类中声明虚方法,其方法名、参数名、参数方向都应该保持一致
- 在调用虚方法时,它将调用句柄指向对象的方法,而不受句柄类型的影响
class BasePacket;
int A = 1;
int B = 2;
function void printA;
$display("BasePacket::A is %d", A);
endfunction
virtual function void printB;
$display("BasePacket::B is %d", B);
endfunction
endclass
class My_Packet extends BasePacket;
int A = 3;
int B = 4;
function void printA;
$display("My_Packet::A is %d", A);
endfunction
virtual function void printB;
$display("My_Packet::B is %d", B);
endfunction
endclass
module tb;
BasePacket P1 = new();
My_Packet P2 = new();
initial begin
P1.printA; // A is 1
P1.printB; // B is 2
P1 = P2; // 子类句柄赋值给父类,父类句柄指向子类的对象
P1.printA; // A is 1
P1.printB; // B is 4
P2.printA; // A is 3
P2.printB; // B is 4
end
endmodule


父类句柄默认会查找调用父类方法,当子类句柄赋值给父类,父类句柄指向子类的对象后,父类句柄查找方法会扩大到子类里,如果子类里有同名方法,那么就会执行子类的同名方法。故P1.printB()和P2.printB()打印结果都是4。
virtual关键字的作用:虽然句柄类型不一样,但是调用函数会以子类的实现优先,即子类如果有同名方法就调用子类里的方法。
变量能不能也声明成virtual:不可以
- 人家都叫虚方法了,都没说虚变量诶
- 父类访问方法的范围可以扩展到子类,但是访问的变量范围只有父类变量范围
- 上述代码子类方法可以不用virtual声明,但是父类一定要声明
- 上述代码,父类不用virtual,子类用virtual,则不行,这样父类对象在查找方法时候,不知道要去子类找,只会在父类范围内查找
一些建议点:
- 类在封装的时候建议不要local、protected
- 类在继承的时候,为了方便以后访问到更多的变量,子类继承父类的时候尽量不要出现同名变量
边栏推荐
- 手写分布式配置中心(1)
- #yyds dry goods inventory #Switching equipment serious packet loss troubleshooting
- Huggingface入门篇 II (QA)
- 阅读笔记:如何理解DevOps?
- 如何写好测试用例
- 2022 Niu Ke Summer Multi-School Training Camp 5 (BCDFGHK)
- The role of @ Import annotations as well as how to use
- ~ hand AHB - APB Bridge 】 【 AMBA AHB bus
- 图解 Canvas 入门
- 元宇宙:未来我们的每一个日常行为是否都能成为赚钱工具?
猜你喜欢

图解 Canvas 入门

Senior game modelers tell newbies, what are the necessary software for game scene modelers?

leetcode经典例题——单词拆分

简单的顺序结构程序(C语言)
![[CVA Valuation Training Camp] Financial Modeling Guide - Lecture 1](/img/8b/360df9a9094037dc358cb21c60cdc8.png)
[CVA Valuation Training Camp] Financial Modeling Guide - Lecture 1

Essential knowledge for entry-level 3D game modelers

10 种常见的BUG分类

Ab3d.PowerToys and Ab3d.DXEngine Crack

STC89C52RC的P4口的应用问题
![[Happy Qixi Festival] How does Nacos realize the service registration function?](/img/df/5793145da45bc80d227b0babfac914.png)
[Happy Qixi Festival] How does Nacos realize the service registration function?
随机推荐
克服项目管理中恐惧心理
矩阵数学原理
Detailed explanation of common DNS resource record types
How to automatically push my new articles to my fans (very simple, can't learn to hit me)
Security software Avast and Symantec NortonLifeLock merge with UK approval, market value soars 43%
[LeetCode] Summary of Matrix Simulation Related Topics
手写分布式配置中心(1)
2022牛客暑期多校训练营5(BCDFGHK)
Implementation principle of golang coroutine
资深游戏建模师告知新手,游戏场景建模师必备软件有哪些?
学会反射后,我被录取了(干货)
【CVA估值训练营】财务建模指南——第一讲
典型相关分析CCA计算过程
建模师经验分享:模型学习方法
lua 如何 实现一个unity协程的工具
【七夕情人节特效】-- canvas实现满屏爱心
RK3399平台开发系列讲解(内核调试篇)2.50、嵌入式产品启动速度优化
性能测试如何准备测试数据
KT148A电子语音芯片ic方案适用的场景以及常见产品类型
【论文笔记】—低照度图像增强—Unsupervised—EnlightenGAN—2019-TIP