色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SystemVerilog中的類的繼承

芯片驗證工程師 ? 來源:芯片驗證工程師 ? 作者:芯片驗證工程師 ? 2022-11-15 09:47 ? 次閱讀

繼承是基于類的面向對象編程(object-oriented pro - gramming)的最重要特性之一。

擴展類,簡言之,就是基類的擴展。

擴展類繼承了基類的所有屬性和方法,并且支持在繼承類中重寫基類的屬性和方法以及新增更多的屬性和方法。

所以,繼承類的好處是什么?

1、繼承類對基類的復用+改進
2、基類的改動能很快地影響到所有繼承類,減少公共代碼的修改

例如,可以定義一個名為EthernetPacket的基類。然后定義擴展類,如EtherErrorPacket、EtherLatencyPacket等,除了繼承基類的屬性,還可以根據需要新增更多的新屬性和方法。

module class_TOP( );

class base;
logic [31:0] data1;
logic [31:0] data2;
logic [31:0] busx;

function void bus;
busx = data1 | data2;
endfunction

function void disp;
$display("From Base Class :: busx OR = %h", busx);
endfunction

endclass : base

class ext extends base;
logic [31:0] data3; //add a new property
function new ( );
$display("Call base class method from extended class - 
super.disp");
super.disp;
endfunction

function void bus; //redefne function 'bus' of class 'base'
busx = data1 & data2 & data3;
//data1,data2 inherited from class 'base'
endfunction

function void disp; //redefne function 'disp' of 
class 'base'
$display("From Extended Class :: busx AND = %h",busx);
endfunction

endclass : ext

initial begin
base b1;
ext e1;
b1 = new;
e1 = new;
b1.data1 = 32'h ffff_0000;
b1.data2 = 32'h 0000_ffff;
b1.bus;
b1.disp( );
e1.data1 = 32'h 0101_1111;
e1.data2 = 32'h 1111_ff;
e1.data3 = 32'h 1010_1010;
e1.bus;
e1.disp( );
end
endmodule

仿真log:

Call base class method from extended class - super.disp
From Base Class :: busx OR = xxxxxxxx
From Base Class :: busx OR = ffffffff
From Extended Class :: busx AND = 00001010
 V C S S i m u l a t i o n R e p o r t

在class “base”中,我們定義了屬性data1、 data2和busx,然后又定義了2個functions “bus”和“disp”

由于我們沒有顯式地定義構造函數new(),所以變量data1, data2和busx都會被初始化成“x”態 。

class “ext”是class “base”的繼承類,所以類“ext”自然也會有屬性“data1,” “data2,” 和“busx”。

同時我們在類“ext”中額外聲明了屬性“data3”,并且覆蓋了父類中函數“bus”和“disp”的聲明。

在上面的例子中,我們在擴展類"ext"中的構造函數中通過關鍵字“super.”來調用父類中聲明的函數。所以會打印:

From Base Class :: busx OR = xxxxxxxx

在initial語句塊中,我們賦值父類中的屬性,然后打印出“busx.”(即data1 | data2)。然后修改擴展類中的屬性,然后打印出“busx.”(覆蓋過的函數data1 & data2 & data3)

仿真的log也證明了父類的函數被成功地覆蓋掉了。

每一個class 都會有一個構造函數new()(隱式或者顯式的),在擴展類的構造函數中,第一件事就是要去調用父類的構造函數“super.new( )”。然后如果你忘了在擴展類的構造函數中添加,編譯仿真工具也會自動幫你添加的。

一般來說不需要顯式地添加super.new(),但是如果構造函數帶參數,那么必須要顯式地添加supoer.new()

Inheritance Memory Allocation

還是那句話,理解一個語言的很多特性都需要從內存分配的角度去理解。

如果需要完全理解擴展類,就需要理解基類和擴展類中的屬性和函數的內存分配。

module class_TOP( );
 class aa;
 int i1;
 function funAA;
 endfunction
 endclass : aa
 
 class bb extends aa;
 int i1;
 function funBB;
 endfunction
 endclass : bb
 
 initial begin
 bb b;
 b = new( );
 end
 endmodule


在上面的例子中,雖然我們只是調用了擴展類的構造函數“b = new( ),” ,但是實際上,我們不僅分配的類“bb”的內存空間,還分配了基類“aa”的內存空間,即使變量名稱一樣。

93d6f52a-6436-11ed-8abf-dac502259ad0.png

這個同名的變量需要通過作用域(不同的內存分配)進行區分。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110075
  • System
    +關注

    關注

    0

    文章

    165

    瀏覽量

    36929

原文標題:SystemVerilog中的類的繼承

文章出處:【微信號:芯片驗證工程師,微信公眾號:芯片驗證工程師】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    SystemVerilog構造函數new

    systemverilog,如果一個沒有顯式地聲明構造函數(new()),那么編譯仿真工具會自動提供一個隱式的new()函數。這個new函數會默認地將所有屬性變量。
    發表于 11-16 09:58 ?3636次閱讀

    SystemVerilog的Virtual Methods

    SystemVerilog多態能夠工作的前提是父的方法被聲明為virtual的。
    發表于 11-28 11:12 ?698次閱讀

    關于Java繼承的問題

    在Java繼承是面向對象編程的一個重要概念,它允許一個(稱為子類或派生繼承另一個
    的頭像 發表于 09-30 10:48 ?553次閱讀

    淺析多繼承派生的虛基

    繼承派生與基有何關系?多繼承派生與虛基有何關系?
    發表于 09-30 06:26

    python繼承

    的同時,又可以根據需要進行修改、拓展。繼承的語法結構是class 子類(父):1. 單繼承舉個例子:下面的代碼。先是定義了一個 People
    發表于 03-08 16:40

    什么是繼承?

    什么是繼承?繼承是子類利用父定義的方法和變量就像它們屬于子類本身一樣. class Car {   int color_number;&n
    發表于 04-28 14:26 ?720次閱讀

    Java繼承與派生

    對于面向對象的程序設計語言來說,毫無疑問是其最重要的基礎。抽象、封裝、繼承、多態這四大特性都離不開,只有存在,才能體現面向對象編程的特點,今天我們就來了解一些
    發表于 09-27 10:55 ?0次下載
    Java<b class='flag-5'>類</b>的<b class='flag-5'>繼承</b>與派生

    構造函數()繼承的方式與實驗

    繼承:利用構造函數()繼承的方式 : JS是沒有的概念的 , 把JS
    發表于 11-24 15:26 ?654次閱讀

    C++繼承訪問級別學習總結(二)

    上一篇文章我們介紹了c++繼承學習總結;今天我們繼續來分享c++繼承
    的頭像 發表于 12-24 16:10 ?736次閱讀

    python繼承詳解

    和方法的同時,又可以根據需要進行修改、拓展。 繼承的語法結構是 class 子類(父): 1. 單繼承 舉個例子:下面的代碼。先是定義了一個 People
    的頭像 發表于 03-08 16:40 ?3095次閱讀

    怎樣在Java實現多繼承

    Java是一種面向對象的只允許單繼承的語言,那么怎樣在Java實現多繼承呢? 2 方法 1. 多層繼承 如果要直接繼承
    的頭像 發表于 02-17 14:55 ?1326次閱讀

    簡述繼承

    繼承:一個繼承另一個,自動擁有這個的屬性和方法,類似于包含與被包含的關系。被
    的頭像 發表于 02-17 15:00 ?1015次閱讀
    簡述<b class='flag-5'>類</b>的<b class='flag-5'>繼承</b>

    Python繼承詳解

    在 Python 繼承是一種重要的面向對象編程概念。通過繼承,我們可以定義一個新的,它繼承了現有
    的頭像 發表于 04-20 16:56 ?1282次閱讀

    Python繼承的基本規則

    繼承規則 與其他基于的語言一樣,可以通過繼承組合多個定義。 定義可以擴展(或繼承)多個其他
    的頭像 發表于 09-20 14:24 ?519次閱讀

    java子類可以繼承的什么

    Java是一種面向對象的編程語言,它支持繼承的概念。繼承是面向對象編程的三大特性之一,它允許一個(稱為子類或派生繼承另一個
    的頭像 發表于 08-20 11:02 ?1149次閱讀
    主站蜘蛛池模板: 蜜臀色欲AV无人A片一区| 国产精品久久久久无码AV色戒| 91蜜桃视频| 99在线精品国自产拍| 把内衣脱了把奶露出来| 高H各种PLAY全肉NP| 国产AV精品无码免费看| 国产囗交10p| 久久国产高清字幕中文| 魔乳 堕乳漫画acg产卵| 日本wwwxx| 校草让我脱了内裤给全班看| 亚洲精品蜜夜内射| 8x8x我要打机飞在线观看| chinesetoilet美女沟| 国产精品久久vr专区| 久久国产影院| 嗯 用力啊 嗯 c我 啊哈老师| 色 花 堂 永久 网站| 亚洲国产女人aaa毛片在线| 最近在线视频观看2018免费| 成人bt下载| 精品国产免费观看久久久| 牛牛在线精品视频| 鸭子玩富婆流白浆视频| 做你的爱人BD日本| 国产AV精品白浆一区二| 久久久久免费视频| 揉抓捏打抽插射免费视频| 亚洲人成在线播放无码| 久久久精品免费视频| 免费。色婬网站| 五月丁香婷姐色| 91久久精品一区二区三区| 国产99在线视频| 久久午夜夜伦痒痒想咳嗽P| 日韩精品久久久久久久电影| 亚洲免费一| 成人在免费观看视频国产| 久久久无码精品亚洲欧美| 色屁屁影院|