91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

唐河县| 汉寿县| 肇州县| 青浦区| 来凤县| 盐亭县| 罗江县| 揭西县| 连江县| 汉沽区| 玉屏| 蕉岭县| 上栗县| 襄垣县| 龙里县| 图们市| 黑河市| 那坡县| 赫章县| 巴林右旗| 阳江市| 洪雅县| 宁强县| 樟树市| 平武县| 蒙山县| 柞水县| 红河县| 叙永县| 黄梅县| 蚌埠市| 抚远县| 松原市| 秦皇岛市| 遵化市| 鄂托克前旗| 安泽县| 沧州市| 景洪市| 宿州市| 涞水县|