class Transaction; //父類
rand bit [31:0] src;
function void display(input string prefix = ""); //成員函數display
$display("%sTransaction: src = %0d", prefix, src);
endfunction
endclass
class BadTr extends Transaction; //子類
bit bad_crc;
function void display(input string prefix=""); //同名函數display
$display("%sBadTr: bad_crc = %b", prefix, bad_crc);
super.display(prefix); //子類調用了父類
endfunction
endclass
Transaction tr; //聲明父類句柄
BadTr bad; //聲明子類句柄
bad = new(); //構建BadTr擴展對象
tr = bad; //基類句柄指向擴展對象
$display(tr.src); //通過父類句柄查找src
tr.display(); //調用父類的display;
若將父類直接賦值給子類,則會報錯。即便做了$cast(tgt,src)轉換,編譯結果爲0。
只有源對象和 目標句柄是同一類型,或者目的句柄的擴展類,$cast()函數執行 成功,返回1,否則返回0.
class Transaction; //父類
rand bit [31:0] src;
function void display(input string prefix = ""); //成員函數display
$display("%sTransaction: src = %0d", prefix, src);
endfunction
endclass
class BadTr extends Transaction; //子類
bit bad_crc;
bit bad2;
function void display(input string prefix=""); //同名函數display
$display("%sBadTr: bad_crc = %b", prefix, bad_crc);
super.display(prefix); //子類調用了父類
endfunction
endclass
Transaction tr; //聲明父類句柄
BadTr bad; //聲明子類句柄
bad = new(); //構建BadTr擴展對象
tr = bad; //基類句柄指向擴展對象
$cast(bad2,tr); //進行類型轉換
bad2.display();
最後bad2.display 調用子類中的display。