返回介绍

11.4 对象(类实例)

发布于 2020-09-09 22:55:49 字数 2387 浏览 958 评论 0 收藏 0

类定义了一个数据类型。对象是类的实例。在使用一个类的时候,需要首先声明一个类型为该类的变量(这个变量保存了一个对象句柄),然后使用new函数产生该类的一个对象,然后再将它赋值给变量。

Packet p;  // 声明一个类型为Packet的变量
p = new;   // 将变量初始化成Packet新分配的一个对象

变量p保存了一个对象句柄,该句柄指向了Packet类的一个对象。

缺省情况下,未初始化的对象句柄被设置成一个特殊值null。我们可以通过将一个对象的句柄与null进行比较来确定对象是否已被初始化。

例如:下面的任务task1检查是否对象已经被初始化。如果没有,它会通过new命令产生一个新的对象。

class obj_example;
    ...
endclass

task task1(integer a, obj_example myexample);
    if (myexample == null) myexample = new;
endtask

通过一个null对象句柄访问非静态成员(参见11.8节)或虚拟方法(参见11.19节)是非法的。使用一个null对象的无效访问会产生不确定的结果,并且实现工具可以发布一个错误信息。

SystemVerilog对象使用一个对象句柄来引用。在C语言指针和SystemVerilog对象句柄之间存在许多不同之处。在怎样使用C语言指针上面,C语言给编程者提供了许多自由。而SystemVerilog对象句柄的使用则存在许多限制。例如,C语言指针可以递增,而SystemVerilog对象句柄则不能。除了对象句柄外,3.6节引入了chandle数据类型,它可以与DPI直接编程接口一起使用(参见第二十七章)。

表11-1:指针和句柄类型的比较

操作C指针SV对象句柄SV chandle
算术运算(例如递增)允许不允许不允许
指向任意数据类型允许不允许不允许
当为null时废弃错误不允许不允许
强制类型转换允许受限制不允许
赋值为一个数据类型的地址允许不允许不允许
未引用的对象被当作无用数据(垃圾数据)收集不是是的不是
缺省值未定义nullnull
指向类(C++)允许不允许

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文