SystemVerilog学习——构造函数new

news2024/11/17 5:48:21

一、概述

        在 SystemVerilog 中,new 是一个构造函数,用于创建类的实例(即对象)。它在面向对象编程(OOP)中起着重要作用,负责实例化一个对象并进行初始化。与传统编程语言(如 C++ 或 Java)中的构造函数类似,new 用来初始化对象的成员变量或执行必要的准备工作。

        SystemVerilog 类的 new 构造函数通常用于创建一个类的对象实例。它有以下特点:

  • 语法:class_name new();class_name new(input_args);

  • 作用:在创建类的对象时,new 方法用来执行对象的初始化操作。

  • 初始化:new 可以在类实例化时对类的成员变量进行初始化。

二、基本结构

        构造函数与普通的方法不同,它通常没有返回值(并且不需要显式地写出 return)。new 作为一个方法,通常会接受一些参数来初始化类的成员变量。

class MyClass;
    // 成员变量
    int a;
    string name;

    // 构造函数
    function new(int a_value, string name_value);
        a = a_value;
        name = name_value;
    endfunction
endclass

三、使用

        在 SystemVerilog 中,类的实例化(即对象创建)并不会自动调用 new 构造函数;需要显式地调用 new 来创建对象并初始化它们。

3.1 对象的显式创建

        类的对象(即类的实例)需要显式调用 new 构造函数进行初始化。这和许多面向对象编程语言(如 C++、Java)相似。

class MyClass;
    int a;
    string name;

    function new(int a_value, string name_value);
        a = a_value;
        name = name_value;
    endfunction
endclass

MyClass obj;  // 声明对象
obj = new(10, "Test");  // 显式调用构造函数

3.1.1 为什么需要显式调用 new

        SystemVerilog 的类是动态分配的,它们并不像传统的C语言或者 Verilog 中的 structmodule 那样具有静态大小。因此,为了确保类的对象正确地创建和初始化,必须显式调用 new 来分配内存,并进行初始化。

3.1.2 new 的作用

  1. 内存分配new 构造函数会为类的对象分配内存空间。这是因为类的对象是动态创建的,并不直接存储在栈上,而是存储在堆中。

  2. 初始化成员变量new 方法通常用于初始化类的成员变量。你可以在 new 构造函数中设置初始值,确保对象创建时处于有效的状态。

  3. 继承时的构造函数调用:如果类是从其他类继承而来,子类的 new 方法通常会显式调用父类的 new 方法,以确保父类成员得到正确初始化。

3.2 自动调用的情况

3.2.1 默认构造函数

        如果类没有显式定义 new 构造函数,那么 SystemVerilog 会自动提供一个默认构造函数,这个默认构造函数会将类的所有成员变量初始化为默认值(如数字类型初始化为 0,字符串类型初始化为空字符串等)。但即便如此,您仍然需要显式地实例化类的对象。

        例如,如果没有显式定义 new,SystemVerilog 会自动创建一个默认构造函数:

class MyClass;
    int a;    // 默认为 0
    string name;  // 默认为 ""
endclass

MyClass obj;  // 使用默认构造函数

        在这种情况下,obj 会被创建,并且其成员 a 会被初始化为 0name 会被初始化为空字符串 ""

3.2.2 动态创建对象

        对象的动态创建是通过显式调用 new 来完成的。SystemVerilog 允许通过 new 来动态分配内存并初始化对象。没有 new 的话,类的对象会是一个句柄(或者空指针 null),并且无法使用。

MyClass obj;  // 仅声明对象,但未创建
obj = new();  // 通过 new 创建对象

3.3 继承与 new

class ParentClass;
    int a;
    function new(int a_value);
        a = a_value;
    endfunction
endclass

class ChildClass extends ParentClass;
    string name;

    function new(int a_value, string name_value);
        super.new(a_value);  // 显式调用父类的构造函数
        name = name_value;
    endfunction
endclass

// 实例化时显式调用 new
ChildClass obj = new(10, "ChildTest");

        在这个例子中,ChildClassnew 构造函数会显式调用父类 ParentClassnew 构造函数,并在初始化过程中设置 name 成员。

四、总结

        在 SystemVerilog 中,new 是类的构造函数,用于显式创建对象并初始化其成员变量。对象的创建必须通过调用 new(),并且可以使用带参数的 new 来传递初始化值。new() 会在堆上分配内存并执行初始化操作,确保对象的成员变量得到正确的初始值。尽管类可以定义多个构造函数,new 方法的调用总是与对象的动态内存分配紧密相关,且在实例化时自动触发。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2241968.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

无线网络信号 6G、5G和2.4G 的一些小科普

无线网络信号划分为6G、5G和2.4G这几类信号,它们各自有不同的用途和区别: 1、 2.4G无线技术 - 用途:2.4G无线技术广泛应用于智能家居、物联网、WLAN和蓝牙设备等。它是一个全球性的工作频段,适用于低速率的应用,如普通…

什么是GCP kunernetes的Node Taints and Tolerations

在Kubernetes中,Node taints和Pod tolerations是两个相关的功能,它们用于控制Pods的调度,以确保Pods不会调度到不适当的节点上。以下是这两个概念的详细解释: Node Taints(节点污点) 定义:Node…

ROS进阶:使用URDF和Xacro构建差速轮式机器人模型

前言 本篇文章介绍的是ROS高效进阶内容,使用URDF 语言(xml格式)做一个差速轮式机器人模型,并使用URDF的增强版xacro,对机器人模型文件进行二次优化。 差速轮式机器人:两轮差速底盘由两个动力轮位于底盘左…

【Playwright + Python】系列(十)利用 Playwright 完美处理 Dialogs 对话框

哈喽,大家好,我是六哥!今天我来给大家分享一下如何使用playwight处理Dialogs对话框,面向对象为功能测试及零基础小白,这里我尽量用大白话的方式举例讲解,力求所有人都能看懂,建议大家先收藏&…

控制器ThinkPHP6

五、控制器中对数组值的返回 在做接口服务时,很多时候回使用数组作为返回值,那么数组如何返回成 json呢? 在 tp6 中返回json 很简单,直接使用 json 进行返回即可,例如: public function index(){$resarra…

基于Java Springboot城市交通管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数…

Ubuntu24.04挂载磁盘

一、引言 由于几块磁盘每次开机时的编号都不一样,造成了很多麻烦,所有重新挂载磁盘试一试。 参考链接: ubuntu挂载磁盘或U盘Ubuntu添加新硬盘,挂载到根目录下的某个文件中 二、挂载磁盘 1. 查看盘名 sudo fdisk -l sda 代表第…

springboot003基于springboot的图书个性化推荐系统(源码+包运行+LW+技术指导)

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

【React】状态管理之Zustand

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 状态管理之Zustand引言1. Zustand 的核心特点1.1 简单直观的 API1.2 无需 Provi…

【从零开始的LeetCode-算法】3210. 找出加密后的字符串

给你一个字符串 s 和一个整数 k。请你使用以下算法加密字符串: 对于字符串 s 中的每个字符 c,用字符串中 c 后面的第 k 个字符替换 c(以循环方式)。 返回加密后的字符串。 示例 1: 输入: s "dart&…

Vue的局部使用

文章目录 什么是Vue?局部使用Vue快速入门 常用指令v-forv-bindv-if & v-showv-onv-model Vue生命周期 Axios案例 什么是Vue? Vue是一款构建用户界面的渐进式的JavaScript框架. 局部使用Vue 快速入门常用指令声明周期 快速入门 准备: 准备html页面,并引入Vue模块(…

二分查找法(leetcode 704)

在一个数组里找一个target&#xff0c;判断这个target在不在这个数组里&#xff0c;如果在&#xff0c;返回这个数组所对应的这个元素所对应的下标&#xff0c;否则返回-1. 易错点&#xff1a; &#xff08;1&#xff09;while(left<right) vs while(left<…

Mysql-DQL条件查询

文章目录 条件查询比较运算符逻辑运算符范围like 关键字排序单列顺序组合排序 聚合函数分组基本的分组流程参数的区别 limit 语句limit 语法格式limit 的使用场景 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Mysql专栏&#xff1a;点击&#xff01; ⏰…

Linux(光速安装+centos镜像 图片+大白话)

阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 软件需要 Vmware 下载镜像 下载前需要知道DVD就是标准版 everything就是全家桶 centos8 centos7 规划 假如有一个200G的硬盘 环境配置分区1/100G分区2/boot1G分区3/data50G分区4swap2G&#xff08;内存2 这里忘2了&…

仓库管理系统设计与实现(Java+Mysql)

目 录 摘 要 目 录 第1章 绪论 1.1 研究背景 1.2目的和意义 1.3 论文研究内容 第2章 程序开发技术 2.1 MySQL数据库 2.2 Java语言 第3章 系统分析 3.1可行性分析 3.1.1技术可行性分析 3.1.2经济可行性分析 3.1.3操作可行性分析 3.2系统运行环境 3.3系统流程分…

CentOS 8 安装 chronyd 服务

操作场景 目前原生 CentOS 8 不支持安装 ntp 服务&#xff0c;因此会发生时间不准的问题&#xff0c;需使用 chronyd 来调整时间服务。CentOS 8以及 TencentOS 3.1及以上版本的实例都使用 chronyd 服务实现时钟同步。本文介绍了如何在 CentOS 8 操作系统的腾讯云服务器上安装并…

datawhale11月组队学习 模型压缩技术3:2:4结构稀疏化BERT模型

文章目录 一、 半结构化稀疏性简介二、 代码实践2.1 定义辅助函数2.2 加载模型、tokenizer和数据集2.3 测试baseline模型指标2.4 对BERT-base模型进行半结构稀疏化 《datawhale2411组队学习之模型压缩技术1&#xff1a;模型剪枝&#xff08;上&#xff09;》&#xff1a;介绍模…

大数据学习15之Scala集合与泛型

1. 概述 大部分编程语言都提供了数据结构对应的编程库&#xff0c;并称之为集合库(Collection Library)&#xff0c;Scala 也不例外&#xff0c;且它还拥有以下优点&#xff1a; 易用&#xff1a;灵活组合运用集合库提供的方法&#xff0c;可以解决大部分集合问题 简洁&#xf…

force stop和pm clear的区别

前言&#xff1a;因为工作中遇到force stop和pm clear进程后&#xff0c;进程不能再次挂起&#xff0c;谷歌系统共性问题&#xff0c;服务类应用经清缓存后当下服务就会挂掉&#xff0c;需要系统重启才能恢复。为了更好的“丢锅”&#xff0c;需要进一步学习force stop和pm cle…

SAP+Internet主题HTML样式选择

SAP目前只支持三种HTML样式选择&#xff1a; 样式一 背景色&#xff1a;深色&#xff0c;蓝 特点&#xff1a;适中型排列&#xff0c;与SAP界面排列相同&#xff0c;富含UI特征&#xff0c;整齐美观 URL地址&#xff1a;http://cn1000-sap-01.sc.com:8000/sap/bc/gui/sap/it…