日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

纯虚类(virtual class)和纯虚方法(pure virtual function)

發布時間:2024/3/24 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 纯虚类(virtual class)和纯虚方法(pure virtual function) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

具體內容參加綠皮書,
virtual method

class Transaction;rand bit[31:0] src,dst,data[8];bit[31:0]crc;virtual function void calc_crc();crc=src^dst^data.xor;endfunction endclass :Transaction class BadTr extends Transaction;rand bit bad_crc;virtual function void calc_crc();super.calc_crc();if(bad_crc) crc = ~crc;endfunction endclass;BadTr

使用不同類型句柄的一個代碼塊

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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。