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。