中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SystemVerilog中$cast方法的作用是什么

發布時間:2021-08-11 14:45:15 來源:億速云 閱讀:784 作者:Leah 欄目:互聯網科技

這篇文章給大家介紹SystemVerilog中$cast方法的作用是什么,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

$cast是systemverilog中的內建方法。

$cast可以對不同的內建類型進行轉換,用的更多的是不同層次之間類的轉換。在這種父類與子類之間的轉換里, 父類站的高,子類在底下,從父類向子類的轉換,稱為向下類型轉換,而子類向父類的轉換稱為向上類型轉換。向上類型轉換是安全的,而反之則是不安全的。原因在于子類既然繼承了父類,就擁有父類的一切屬性,除此之外,龍生九子,各有不同,子類還有自己獨特的個性,這些是父類沒有的。當進行向上類型轉換時,相當于父類的句柄指向子類對象,這樣的話句柄仍然能對子類對象與父類相同的屬性進行訪問。但是反過來,如果向下類型轉換也那么自由,當試圖把子類的句柄指向父類的對象會發生什么呢?父類本來劃好了一小塊地盤,但是因為子類含有比父類更豐富的屬性,它很有可能會訪問父類并不包含的資源,這時就找不到該資源,越界了,因此會有error。父類就好像上海,子類相當于長三角地區,包含但不僅僅是上海,因此父類能到的地方子類都可以到,反之不行,因此把子類的句柄給父類沒關系,但反之不行,所以向下類型是需要有嚴格的類型檢查的,阻止非法轉換。

ex1:

class father;    string m_name;
   function new (string name);      m_name = name;    endfunction : new
   function void print ();      $display("Hello %s", m_name);    endfunction : printendclass : father
class child1 extends father;    string area1 = "jiangzhehu";
   function new (string area1);      super.new(area1);    endfunction : newendclass : child1
class child2 extends father;    string area2 = "shanghai";
   function new (string area2);      super.new(area2);    endfunction : newendclass : child2

program top;    father f;    child1 c10,c11,c12;    child2 c20,c21,c22;
   initial begin            f = new ("shanghai");            f.print();            c10 = new("jiangzhehu");            f = c10;            f.print();            c20 = new("changsanjiao");            f = c20;            f.print();            c20.area2 = "zhejiang";            $cast(c21, f);            c21.print();            $display("has %s", c21.area2);            c22 = c20;            c22.print();            $display("has %s", c22.area2);            c20.area2 = "hangzhou";            c21.print();            $display("has %s", c21.area2);            c22.print();            $display("has %s", c22.area2);
   end  endprogram : top

仿真結果如下:

# Hello shanghai# Hello jiangzhehu# Hello changsanjiao# Hello changsanjiao# has zhejiang# Hello changsanjiao# has zhejiang# Hello changsanjiao# has hangzhou# Hello changsanjiao# has hangzhou

請注意,不能直接把$cast(c21, f);前提是先把子類賦給父類才行。

使用cast也不能把c20給c10;

關于SystemVerilog中$cast方法的作用是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长顺县| 永修县| 锡林浩特市| 广东省| 同德县| 平塘县| 彭山县| 汕尾市| 蒲江县| 吉水县| 梅河口市| 怀柔区| 紫金县| 桓台县| 若羌县| 中方县| 舒兰市| 威远县| 卓尼县| 阿拉善左旗| 正安县| 天镇县| 涟水县| 安福县| 濮阳市| 安乡县| 余庆县| 团风县| 湘乡市| 广昌县| 阳曲县| 平谷区| 麟游县| 琼海市| 高州市| 二连浩特市| 乌兰察布市| 家居| 青神县| 射阳县| 阿坝县|