SV---类的继承

1.继承性

关键词:extends

例题

class  cat;
	protected cloor_t color;
	local bit is_good;
	function set_good(bit s);
		this.is_good = s;
	endfunction
endclass

class black_cat extends cat;
	function new();
		this.color = BLACK;
	endfunction
endclass

class white_cat extends cat;
	function new();
		this.color = WHITE;
	endfunction
endclass

black_cat bk;
white_cat wt;
initial begin
	bk = new();
	wt = new();
	bk.set_good(1);
	wt.set_good(1);
end 

解析:

因为color的封装是protected,只有子类可以访问,所以无法通过外部修改颜色,A错。

因为is_good的封装是local,子类无法访问,黑猫是猫的子类,所以无法修改,B,外部也无法访问,C错。

子类通过super来索引父类的同名函数

子类中使用this.xxx是先访问子类有没有xxx的变量或者方法,而super.xxx直接访问父类的变量和方法,不会访问子类。

案例

在test类中通过继承于basic_test的两个子类test_wr和test_rd,分别用于对DUT进行写测试和读测试。

class basic_test; //父类
	int def = 100;//成员变量赋予默认值
	int fin;
	task test(stm_ini ini);
		$display("basic_test::test");
	endtask
	
	function new(int val);
		...
	endfunction
endclass 

class test_wr extends basic_test;//子类wr
	function new()l
		super.new(def);
		$display("test_wr::new");
	endfunction
	
	task test(stm_ini ini);
		super.test(ini);
		$display ("test_wr::test");
		   ...
	endtask
endclass

class test_rd extends basic_test;//子类rd
	function new()l
		super.new(def);
		$display("test_rd::new");
	endfunction
	
	task test(stm_ini ini);
		super.test(ini);
		$display ("test_rd::test");
		   ...
	endtask
endclass

子类中的方法和父类本没有任何关联,是通过super才继承的。

2.成员覆盖

在上述代码父类中def = 100 的基础上,编写另一个子类

class test_wr extends basic_test;//子类wr
	int def = 200;
	function new()l
		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

这个子类中def = 200,所以super.def = 100,this.def = 200:.

问题:下述代码中wr.def和t.def的值分别是多少?

module tb;
    ...
	basic_test t;//父类声明句柄
	test_wr wr;//子类声明句柄
	initial begin
		wr = new();//子类创建对象
		t = wr;子类句柄赋值给父类
		$display("wr.def = %0d",wr.def);
		$display("t.def = %0d",t.def);
	end
endmodule

解析:子类句柄赋值给父类之后,被赋值的父类句柄只能指向整个子类中属于父类的部分,如图,t只能指向basic部分,所以t.def = 100,wr.def = 200.但父类的句柄不能赋值给子类

  • 19
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SV-CART是一款专业、功能强大的开源网店系统, 是一套集网上购物和网站内容管理于一体的电子商务解决方案。 从第一版SV-Cart网店系统诞生至今已有半年时间。在这半年中,SV-Cart团队根据业界的最新发展趋势,以及客户提出的宝贵建议,不断对产品进行着优化、升级,在SV-Cart v1.1版本的基础上,SV-Cart网店系统又完成了一次漂亮的全方位进化。您可立即下SV-Cart 1.2 Beta1 与之前的V1.1版本相比,1.2 Beta1增加了多项功能,以更丰富的手段、更人性化的设置,更全面、更深入地满足用户的业务需求。现今已有多家跨国企业正在使用SV-Cart网店系统 进行着他们的国际贸易。 新增功能看点: ·新增多语言、多货币切换: 用“国际形象”包装您的网店,让您的网店登上国际舞台,网罗全球商机! ·新增多模版切换:一改以往单调死板的界面风格,激活客户体验,激起客户强烈的购买欲! ·新增商品筛选功能 ·新增查看所有商品相册功能 ·新增查看所有商品评论功能 ·支持同一商品 多尺寸、多款式供客户选购 ·支持客户直接购买充值积分 ·通过“联系我们”板块,支持客户以多种联系方式联系商家 ·内部管理:新增操作员日志查看  操作员管理  角色管理  部门管理  店铺管理 ·产品管理:新增图片批量上传功能 ·新增标签管理 ·文章管理:新增生成静态htlm文章页面功能 ·系统管理:新增信息库管理,方便调看网站资源信息,进行日常维护管理 ·功能管理:新增语言管理、货币管理、字典管理 ·采购管理:新增供应商管理,供应商商品管理,可按关键字等查询供应商资料商品进价等信息  另外:SV-Cart团队针对一些特殊的高端用户群体,特别研发了高级综合版ALL-IN-ONE V1.2 网店系统,以满足企业在业务上的特殊需求

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值