- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面向对象编程OOP
一、OOP术语
1.class类:包含变量和子程序的基本构建块。
2.对象:类的一个实例。
3.句柄:指向对象的指针,一个OOP句柄就像对象的地址,但是它只能保存在一个只能指向单一类型数据类型的指针中。
4.属性:存贮数据的变量。
5.方法:任务和函数
二、创建新对象
1.区别Verilog和SV:
(1)Verilog中的一个模块是在代码编译的时候例化的。SV中是运行测试平台时需要的时候才被建立的。
(2)Verilog的例化是静态的,像硬件一样,只有信号值得变化。SV激励对象不断地被创建并且驱动DUT,最后这些对象所占用的内存可以被释放供新对象使用。
(3)Verilog的顶层模块不会被显示的例化,但是SV类在使用之前必须要先例化。
(4)Verilog实例名只可以指向一个实例。而SV句柄可以指向很多对象,当然一次只能指向一个。
2.
构造函数new():例化一个对象时,相当于为对象申请一个新的内存来保存对象的变量。
不能有返回值,因为其返回的是指向一个类对象的句柄,其类型就是类本身。当出现多个同名的对象时,至于new()调用的是哪个new()函数,这取决于赋值操作符左边的句柄类型
? ? ? ?Trans ?tr; ? //声明一个句柄,初始化为特殊值null
? ? ? ?tr ?= new(); //为一个Trans对象分配空间,将变量初始化为默认值,二值的为0,四值的为x.并返回保存对象的地址
3.将声明和创建分开:若同时会引起顺序问题。若忘记使用automatic存储空间,构造函数将在开始仿真时,而非进入块的时候调用。
*4.声明一个句柄来创建一个对象,在仿真中一个句柄可以指向多个对象。
? ? ? ? Trans tr1,tr2;//声明两个句柄
? ? ? ? tr1=new();// 为第一个类对象分配地址空间
? ? ? ? tr2=tr1;//复制,指向同一个地址,都指向第一个对象
? ? ? ? tr1=new();//为第二个Trans对象分配地址
*5.SV中分辨对象不再被引用的方法是记住指向它的句柄的数量,当最后一个句柄不在引用某个对象了,SV就将释放这个对象。
三、静态变量
1.静态变量使用范围只在这个类中。通常在声明时初始化,引用时无需句柄,可以用作用域操作符::
2.不允许静态方法读写非静态变量
四、类的方法默认为自动存储
五、this是什么?将局部变量赋给类一级变量
? ? class ?tr;
? ? ? string a;
? ? ? function new(string a);
? ? ? ?this.a=a; ? //类变量a=局部变量a
? ? ? endfunction
? ? endclass
六、在类内使用另一个类:通过指向对象的句柄,一个类内部可以包含另一个类的实例。在调用其他类的成员时要记得例化,否则句柄为null,调用失败,一般在构造函数中实现例化。
七、动态对象:在OOP中可能有很多对象,但是只有少数句柄。句柄可能存储在数组或者队列中
1.将对象传给方法:当调用方法的时候,传递的是对象的句柄而不是对象本身。
2.当调用一个标量变量(存储单个数据,不是数字也不是对象)的方法时并且使用ref关键词,SV传递该标量变量的地址,所以方法可以改变标量变量的值。若不带ref则是把标量变量的值复制到参数变量中,对该参数变量的任何改变不会影响原变量的值。若忘记给参数前加ref则在方法的内部对参数的修改不会被调用该方法的代码看到?
*3.方法可以改变一个对象,即使方法的句柄参数没有使用ref关键词。因为方法可以在不改变句柄的情况下,将对象改变。如果不想让对象在被方法调用中改变,那就传递一个对象的拷贝给方法,这样就可以保证原来的对象不变?。下面例子中由于没有对参数进行ref声明,尽管在sss中修改了参数tr,调用块中的句柄t仍是null。
? ?function void sss(trans tr); ? //应改为(ref trans tr)
? ? ? tr=new();
? ? ? tr.addr=42;
? ? ? ...
? ?endfuction
? ?
? ? trans ?t;
? ? initial ?begin
? ? ? sss(t);//创建一个trans
? ? ? $display(t.addr);//失败,因为t=null
? ? end
4.句柄数组:保存并且引用多个对象,数组的每一个元素指向一个对象(或者多个对象??),由句柄构成,而不是对象构成,所以需要在使用它们之前创建所有对象。
*5对象的复制:防止对象的方法修改原始对象的值
? ? ?(1)浅复制(shallow copy)使用new复制一个对象,句柄的复制而不是数据da
您可能关注的文档
- CRISPR-Cas系统基因修饰技术(最终版).ppt
- css强化练习及参考答案.doc
- CSWP认证考试内容.doc
- CT日常维护和保养.doc
- DSP 、单片机以及嵌入式微处理器区别.doc
- dsp的低功耗模式.doc
- DW网页设计笔记.ppt
- E-R图(图书管理系统).doc
- EB的染色原理及其相关讨论.doc
- EGFR基因突变和对应的靶向药物【最全梳理】.doc
- 2026年消防设施操作员之消防设备基础知识考试题库500道带答案(新).docx
- 销售岗前培训课件.ppt
- 2026年消防设备操作员考试题库500道(典型题).docx
- 2026年消防设施操作员之消防设备高级技能考试题库300道附答案(实用).docx
- 2026年消防设施操作员之消防设备高级技能考试题库300道标准卷.docx
- 2026年材料员之材料员基础知识考试题库300道附完整答案(全优).docx
- 2026年材料员之材料员基础知识考试题库300道带答案(培优a卷).docx
- 2026年机械员考试题库含答案(轻巧夺冠).docx
- 2026年材料员之材料员基础知识考试题库300道【夺分金卷】.docx
- 2026年期货从业资格之期货法律法规考试题库500道(考点精练).docx
文档评论(0)