亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

定远县| 洮南市| 广安市| 和顺县| 邢台市| 平乐县| 富川| 邵武市| 紫阳县| 西乌珠穆沁旗| 读书| 安庆市| 蓝山县| 儋州市| 泸水县| 两当县| 邮箱| 申扎县| 宁远县| 通山县| 东平县| 兴化市| 安新县| 和田县| 兴文县| 和龙市| 平定县| 宣威市| 南陵县| 和硕县| 合肥市| 迭部县| 元氏县| 光泽县| 务川| 营口市| 赤水市| 新巴尔虎右旗| 哈密市| 巴楚县| 普兰店市|