微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > 微电子学习交流 > Re: systemverilog的class继承问题

Re: systemverilog的class继承问题

时间:12-12 整理:3721RD 点击:
这个继承在OOP看来很奇怪啊
另外,你VCS/NC都跑过么

systemverilog根据tr指向的对象的类型而不是句柄本身的类型调用对应的方法。如果没有声明virtual方法,则根据句柄本身的类型来调用方法

你得了解oop里多态的概念
method加virtual才会打印后者

声明virtual这个我倒是知道。
我的疑问是,变量i在tr2 = new()的时候不就已经确定了么?执行tr1=tr2这一句的时候,应该只是把句柄tr1指向tr2所指向的memory空间,而那个memory空间里面放着的i的值是2.
当执行tr1.display的时候,调用的函数肯定是tr1的,但是我觉得i的值应该是2才对啊,因为tr1=tr2这句话没有重新分配空间,只是让tr1指向了tr2的那个对象。
多谢~~~

谁告诉你两个i一样了 t2继承了t1,所以t2也继承了t1的i,t2的i是t2自己的 两个i在t2中是两块不同的空间,你的函数没加virtual 打印的自然是基类的i

“两个i在t2中是两块不同的空间”
就是说,在t2指向的memory里面,实际上存放了两个i,一个是基类的,另外一个是派生类的?
我一直以为派生类的int i=2;把基类的int i=1覆盖了呢......原来是并存的关系,而不是覆盖的关系?

你应该先找本oop的书好好看看 new一个object的时候 先给父类成员分配空间 再给子类成员分配空间 所以你用父类指针指向一个子类object的时候访问的是父类成员

好文,建议斑竹mark一下这个帖子,我觉得我在OOP上也是一知半解啊

-----------------------------
|                           |
|            ext            |
|             i             |
|         display()         |
|                           |
|   ----------------------  |
|                           |
|            base           |
|             i             |
|         display()         |
|                           |
-----------------------------
※ FROM: 101.69.72]
※ 来源:·水木社区 http://www.newsmth.net·[FROM: 101.69.72]

不好意思,恕本人愚钝,再请教一下:
按照你的说法,子类的对象所分配的空间里会保存两个i,而父类的对象只会存自己的一个i,那是不是说明子类的对象所占用的空间会大一些呢(包含两个i)?
可是我加代码试了一下,两个对象的大小是一样的。
    tr1 = new;
    tr2 = new;
    size1 = $bits(tr1);
    size2 = $bits(tr2);
    $display("size1: %d\n",size1);
    $display("size2: %d\n",size2);
输出是:
32
32
多谢指教!

你这样难道不是求的指针的大小吗?指针应该都是一样大的 多少个i都一样

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top