纯虚类(virtual class)和纯虚方法(pure virtual function)
生活随笔
收集整理的這篇文章主要介紹了
纯虚类(virtual class)和纯虚方法(pure virtual function)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
具體內容參加綠皮書,
virtual method
使用不同類型句柄的一個代碼塊
Transaction tr; BadTr bad;initial begintr = new();tr.calc_crc(); //調用Transaction::calc_crcbad = new();bad.calc_crc(); //調用BadTr::calc_crctr = bad; //基類句柄指向擴展類tr.calc_crc(); //調用BadTr::calc_crc end這里由于calc_crc定義為了virtual,所以最后一步tr.calc_crc(); 會根據對象類型調用BadTr::calc_crc,而非句柄類型調用Transaction::calc_crc。
如果沒有定義為virtual calc_crc,會根據句柄類型調用Transaction::calc_crc。
BaseTr 是一個virtual class, 可被聲明,可以被extend, 但是不能被實例化。
可以定義 function, virtual function,pure virtual function
pure virtual function 是只有定義,沒有實體的方法,只可以在virtual class中定義。
virtual class BaseTr;static int count;int id;function new();id=count++;endfunctionpure virtual function bit compare(input BaseTr to);pure virtual function BaseTr copy(input BaseTr to=null);pure virtual function void display(input string prefix=""); endclass: BaseTr BaseTr BT; // 正確可以執行 BT = new(); //會報錯。pure virtual function 只有在擴展類中定義了實體,才可以使用
class Transaction extends BaseTr;rand bit[31:0] src, dst,crc, data[8];external virtual function bit compare(input BaseTr to);external virtual function BaseTr copy(input BaseTr to=null);external virtual function void copy_data(input Transaction copy);external virtual function void display(input string prefix="");external function new();endclass//下面是方法實體function bit Transaction ::compare(input BaseTr to); Transaction tr;assert($cast(tr,to));return ( (this.src == tr.src) &&(this.dst == tr.dst) &&(this.crc == tr.crc) &&(this.data == tr.data)); );endfunction: comparefunction BaseTr Transaction ::copy(input BaseTr to=null); Transaction cp;if(to ==null) cp =new();else $cast(cp,to);copy_data(cp);return cp;endfunctionfunction BaseTr Transaction ::copy_data(Transaction copy); copy.src = src;copy.dst = dst;copy.data = data;copy.crc = crc;endfunctionfunction void Transaction ::display(string prefix=""); $display("%s Transaction %0d src =%h, dst = %%x, crc= %x ",prefix,id,src,dst,crc);endfunctionfunction void Transaction ::new(); super.new();endfunction總結
以上是生活随笔為你收集整理的纯虚类(virtual class)和纯虚方法(pure virtual function)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 多物理场仿真软件COMSOL Multi
- 下一篇: STM32F4编码器测速