【system verilog】OOP属性下的构造函数new,虚方法virtual和cast方法(4)

前言

感觉这个标题可以作为小知识汇总的博文了,继续上次的写:

【system verilog】OOP属性下的构造函数new,虚方法virtual和cast方法(3)

父类句柄的小疑问

今天跟同事讨论父类和子类的问题,就是在(3)中讨论的那个指向问题,然后延伸出了另外一个问题:父类指向子类空间时,能否调用父类不存在的、子类拓展出来的方法?

我坚持是可以的,我都指向子类空间了,空间里的东西还不是随便我用?于是乎压了一顿饭。

回来之后做实验:

class father;
	int flow_id;
	
	function new(int id);
		$display("new father");
		flow_id = id;
	endfunction: new
	
endclass: father

class son extends father;
	
	function new();
		super.new(30);
		$display("new son, flow_id='d%0d", flow_id);
	endfunction: new
	
	virtual function son_note();
		$display("son_note");
	endfunction: son_note
	
endclass: son


。。。


	begin
	    father f = son::new();
	    f.son_note();
	end

编译一下!

Error: C:\Users\gaoji\Desktop\sv test\environment.sv(98): Field/method name (son_note) not in 'f'

额,输了一顿饭。

回头想想也合理,基类句柄声明时候应该其中包含那些元素和方法是确定的,子类如果重载或者继承,那么句柄可以感知;如果拓展了新的方法,那么句柄无法感知也是合理的,也就是句柄被声明的一刻,他能访问哪些方法就确定了,不会随着后续指向其他空间而改变,

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尼德兰的喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值