您好,登錄后才能下訂單哦!
本篇內容介紹了“virtual method怎么使用”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
method是class中子程序,包括function和task。
當直接將子類賦值給父類,再調用父類中的方法時,實際調用的還是父類中的方法。除非該方法被virtual聲明,子類就可以覆蓋父類中的方法。
這是systemverilog面向對象語言的多態(polymorphism)特征。
用關鍵字virtual聲明的SystemVerilog方法稱為virtual methods。
Virtual Functions模板:
virtual function function_name;//Function definitionendfunction
Virtual Tasks模板:
virtual task task_name;//task definitionendtask
在示例1中,父類內部的方法聲明時沒有virtual關鍵字,賦值后b_c.display()將調用父類的方法。
class base_class;
function void display;
$display("Inside base_class");
endfunction
endclass
class extended_class extends base_class;
function void display;
$display("Inside extended class");
endfunction
endclass
module virtual_class;
initial begin
base_class b_c;
extended_class e_c;
e_c = new();
b_c = e_c;
b_c.display();
end
endmodule
輸出:
Inside base_class
在示例2中,父類內部的方法聲明時加上virtual關鍵字,賦值后b_c.display()將調用子類的方法。
class base_class;
virtual function void display;
$display("Inside base_class");
endfunction
endclass
class extended_class extends base_class;
virtual function void display;
$display("Inside extended class");
endfunction
endclass
module virtual_class;
initial begin
base_class b_c;
extended_class e_c;
e_c = new();
b_c = e_c;
b_c.display();
end
endmodule
輸出:
Inside extended class
pure virtual method
virtual method:這是一種可以在派生類中繼承的方法,該方法可以在派生類中被覆蓋。
pure virtual method:這是在Virtual Class(可以擴展但不能實例化的類,僅作為基礎類或原型類)中聲明的virtual method。在派生類必須具有該方法的具體實現。
pure virtual method只能是原型或模板。
pure virtual method內部不能具有任何實現。
pure virtual method不允許使用“ end”關鍵字,例如endfunction / endtask。
virtual class base_class;
pure virtual function void display;
endclass
class extended_class extends base_class;
virtual function void display;
$display("Inside extended class");
endfunction
endclass
module virtual_class;
initial begin
extended_class e_c;
e_c = new();
e_c.display();
end
endmodule
如果有一個帶有pure virtual method的Virtual Class,則必須在子類中對其具體實現。但對于virtual method,可以覆蓋也可以不覆蓋。
“virtual method怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。