尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
SV基础之面向对象编程基础(三)
多态与虚方法 — 动态行为绑定背景内容根据绿皮书第5章和第8章总结拓展核心内容多态虚函数我的理解多态Polymorphism对于多态绿皮书里只有两处提到这个词而且解释都非常抽象。在8.3.2节中首次提到OOP中多个子程序使用一个共同的名字的现象叫做“多态”。这个其实会让第一次接触这个词的人一头雾水但是实际多态也就是这句话所描述的意思当你发现一段代码里的某个方法可以在不同的场景下执行不同的任务那这个方法就是多态的。换句话说多态允许使用统一的接口基类句柄操作不同派生类的对象并自动调用对应对象的实际方法从而实现“同一接口多种行为”。多态可以分为静态和动态。静态多态通过参数化类在编译时确定类型。在[[SV基础之面向对象编程基础四]]中介绍动态多态通过virtual方法在运行时根据对象实际类型决定调用哪个方法。virtual方法的使用在基类中声明方法为virtual表示该方法可以在派生类中被重写并且通过基类句柄调用时会动态绑定到实际对象的实现。class Base; virtual function void show(); $display(Base show); endfunction endclass class Derived extends Base; virtual function void show(); $display(Derived show); endfunction endclass module test; Base b; Derived d new(); b d; // 基类句柄指向派生类对象 b.show(); // 输出 Derived show运行时多态 endmodule若去掉virtual则b.show()会调用Base::show()即静态绑定。纯虚方法强制派生类必须实现该方法。纯虚方法在[[SV基础之面向对象编程基础四]]中介绍多态的应用场景第一次了解多态的时候我第一反应是觉得多态会导致混淆如果一个方法可以指向多个行为那每次执行这个方法的时候需要花很多时间去理解这个方法究竟执行的是什么行为。但是后来我逐渐理解了多态是一种高度的抽象概括是为了让顶层调用者忽略这个方法的执行细节多态的存在让本来无限扩大的需求变得统一。用网络梗举个例子人类科技的发展本质就是烧开水和扔石头。“烧开水”和“扔石头”就可以理解为多态你不用去管究竟是用柴火烧开水还是核能烧开水不用管是投石机扔石头还是用火药发射石头反正本质就是烧开水和扔石头。在验证中的应用场景也是非常广泛测试平台组件替换例如用不同风格的驱动器Driver替换基类句柄指向的对象。工厂模式UVM 中根据配置创建不同类型的组件实例。回调Callback在特定钩子函数中插入定制行为。
RELATED

相关推荐

Chopper高级用法:多文件上传、表单提交和复杂API集成实战

Chopper高级用法:多文件上传、表单提交和复杂API集成实战

Chopper高级用法:多文件上传、表单提交和复杂API集成实战 【免费下载链接】chopper Chopper is an http client generator using source_gen and inspired from Retrofit. 项目地址: https://gitcode.com/gh_mirrors/ch/chopper Chopper是Dart和Flutter生态系…

📅 2026/9/10 6:56:53
qmqtt实战案例:构建发布-订阅模式的Qt物联网应用

qmqtt实战案例:构建发布-订阅模式的Qt物联网应用

qmqtt实战案例:构建发布-订阅模式的Qt物联网应用 【免费下载链接】qmqtt MQTT client for Qt 项目地址: https://gitcode.com/gh_mirrors/qm/qmqtt qmqtt是一款专为Qt框架设计的MQTT客户端库,它能够帮助开发者轻松实现物联网设备间的通信功能。本…

📅 2026/8/24 15:56:00
go2_ros2_sdk部署指南:在Docker中快速搭建Unitree GO2的ROS2开发环境

go2_ros2_sdk部署指南:在Docker中快速搭建Unitree GO2的ROS2开发环境

go2_ros2_sdk部署指南:在Docker中快速搭建Unitree GO2的ROS2开发环境 【免费下载链接】go2_ros2_sdk Unofficial ROS2 SDK support for Unitree GO2 AIR/PRO/EDU 项目地址: https://gitcode.com/gh_mirrors/go/go2_ros2_sdk 想要快速为您的Unitree GO2机器人…

📅 2026/9/12 6:20:03
MORE NEWS

更多资讯

📰

epoll是阻塞还是非阻塞?四大I/O模型一次讲透

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

WorkBuddy本地部署:离线大模型工作台实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

大模型推理开发实战:从部署、优化到Agent落地的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

DeepSeek Harness配置实战:通用设置与Agent预设详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Spring Boot高校竞赛管理系统:从选题到答辩全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

串口服务器选型实战:从RS485到工业物联网的全面指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬