SystemVerilog类的继承中成员覆盖问题

在父类和子类里,可以定义相同名称的成员变量和方法,而在引用时,也将按照句柄类型来确定作用域。

示例

父类basic_test

class basic_test;
	int def = 100;
	int fin;
	task test(stm_ini ini);
		$display("basic_test::test");
	endtask
	function new(int val);
		...
	endfunction
endclass

子类test_wr

class test_wr extends basic_test;
	int def = 200;
	function new();
		super.new(def);
		$display("test_wr::new");
		$display("test_wr::super.def = %0d", super.def);
		$display("test_wr::this.def = %0d", this.def);
	endfunction
	...
endclass

调用父类和子类同名变量

module tb;
	...
	basic_test t;
	tets_wr wr;
	
	initial begin
		wr = new();
		t = wr;									//子类赋值给父类
		$display("wr.def = %0d", wr.def);		//200
		$display("t.def = %0d", t.def);			//100

调用父类和子类同名变量def时,子类对象wr里面def的值为200,父类里面def的值为100
在这里插入图片描述
此时,因为子类对象wr继承了父类,所以wr可以访问全部的变量,即可以访问父类中def变量,也可以访问子类中def变量。如果子类句柄赋值给父类句柄以后,父类的句柄虽然指向的是一个子类的对象,但是只能访问这个子类对象中属于它类型的那一部分,也就是说t这个类型是父类的,因此通过t也只能访问这个子类对象里面属于继承于父类里面那一部分的成员变量和方法,所以t.def的值时父类里面def的值。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值