【IC验证】类的一些问题

1、句柄悬空

在声明句柄和创建对象以后,句柄是悬空的,在仿真没开始时内容为null。但是对于结构体和module的例化,仿真开始之前变量就给了一个不确定的值(32'hxxxx)

但是对于放在initial块里面的,在仿真之前,即使是结构体内的变量,仿真之前也不会给值

Value表示句柄c1指向的类是packet_c,@1表示这里是例化第一次

2、类的空间

上述程序一共会产生100个实例,最后c1指向的实例是最后一个实例,前面99个实例找不回来。因为类的对象是动态的,当没有任何一个句柄指向该对象时,该对象所占据的空间就被回收了(自动回收)

3、类的索引

43行虽然还没有例化c1,c2两个对象,但是可以找到data的值,因为data是静态变量,他的空间开辟在类下面,而不是某个变量下面。当然,更加规范的访问方法是使用

但是,类里面的对象,成员变量和方法默认都是动态的,例化的模块(module)是静态的。

同时还可以使用this来索引当前对象的成员。如下,this.x代表的是类里面的x,即1,而不是参数x2

变量的索引遵循就近原则。

同时还可以使用super来索引父类的变量

4、类的拷贝

Tansaction t1,t2;
t1 = new();
t2 = new t1;

SV里面的拷贝都是浅拷贝。浅拷贝是拷贝了对象的引用,当原对象发生变化的时候,拷贝对象也跟着变化;深拷贝是另外申请了一块内存,内容和原对象一样,更改原对象,拷贝对象不会发生变化。

5、类的继承

子类既继承父类的变量,也继承父类的方法,所以下属程序运行结果,p.i和 lp.i都是2

如果子类和父类拥有同名的方法或者函数,则在调用子类的该方法或者函数时,只会执行子类的

例子(重要!):

(1)

(2)

(3)

(4)

lp.i等于12,因为12行子类的 i 为,而12行super.shift只对父类的i进行操作。20行只对子类的i进行操作。

当子类和父类拥有相同的成员变量和方法时,想在子类里面调用父类的变量方法,一定要加super.

所以不要尝试子类与父类使用同名的变量

6、父类句柄与子类句柄的复制

子类句柄复制给父类句柄,经过复制后父类的句柄指向子类的对象,但是其能够访问的范围只有父类的范围。但是子类可以访问父类的方法和对象。

父类的句柄不能直接复制给子类句柄。

视频参看V0选学第七周类的继承1,2

7、对象的复制

输出结果分别为200,200,300,300.。对,没错,wr.def也为300。这是因为h = wr时句柄的复制,所以h.def = 300是对这两个句柄指向的共同对象做成员变量的赋值

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值