1. 程式人生 > 其它 >SystemVerilog中類的五要素以及控制代碼、new函式作用的形象理解,函式返回值

SystemVerilog中類的五要素以及控制代碼、new函式作用的形象理解,函式返回值

轉自:原文連結:https://blog.csdn.net/dinghj3/article/details/116583131

剛開始學面向物件程式設計OOP時都會有點難以接受,但我們可以通過形象的類比來解決這個問題。
在這裡插入圖片描述


    類 class——相當於我們要蓋房的圖紙,有了這個圖紙,我們就能蓋出一堆結構類似的樓房;
    物件 object——可以理解為房子本身,這是我們根據圖紙建起來的;
    控制代碼 handle——房子的地址,門牌號,一個門牌號對應著一個房子,你可以通過門牌號來找到你想找的房子。用專業的話講,就是控制代碼是物件的指標,我們通過控制代碼來找到對應的物件;
    變數 properties(也叫屬性)——是房子裡面的東西。我們知道,房子裡可以有很多東西,也就對應著物件可以有多個變數。比如燈就是房子裡的東西之一。我們可以通過燈的開關來調節房子的亮暗。
    方法 methods——用來操作變數的一段程式碼。如果這個變數是燈的話,那麼這段程式碼對應的就是開燈和關燈兩個動作。

下面再通過一段程式碼來聊一下控制代碼的宣告以及new函式的形象理解。

class Transaction;


    //變數
    ...
    //方法
endclass:Transaction

Transaction tr;
tr = new();
class Transaction;
    //變數
    ...
    //方法
endclass:Transaction

Transaction tr;
tr = new();


我們先是定義了一個類,叫做Transaction。endclass後面的:Transaction最好加上,方便在你識別了很多個類之後一眼看出邊界。

Transaction tr;//聲明瞭一個控制代碼,叫tr
tr = new();//建立了物件

接下來的這兩句的作用分別是聲明瞭一個叫tr的控制代碼,以及用new函式建立了一個物件
。其中,tr = new()的作用有三點:

    例化(建立)物件,也就是申請新的記憶體塊來儲存物件的變數
    初始化變數(二值→0;四值→x)
    返回控制代碼

用更通俗易懂的話來解釋上面這兩句。
Transaction tr; 我通過這一句聲明瞭一個控制代碼,就類似於我指著xx村xx路xx號這個地址,說我準備要在這個地方蓋房子了。

而new函式的三個作用分別可這樣理解。

    建立物件,申請新記憶體——我清理出了一塊空地,並把房子給蓋好了;
    初始化——我把某個品牌的洗衣機、電飯煲、燈什麼的搬進去裡面,新房子就有了;
    返回控制代碼給tr——房子弄好了,很開心,很歡迎朋友們來參觀一下,不然我累了這麼久豈不是白忙活了?所以我把房子的地址(控制代碼tr)發在了好朋友的群聊裡,之後他們就可以憑這個地址來我家玩了!他們可以用電飯煲煮香噴噴的米飯,家裡的洗衣機也可以隨便用哈哈。

new[ ]是用來設定動態陣列大小的。new( )和new[ ]都是用來申請記憶體並初始化變數。兩者最大的不同在於呼叫new( )函式僅建立了一個物件,而new[ ]操作則建立一個含有多個元素的陣列。new( ) 可以使用引數設定物件的數值,而new[ ]只需使用一個數值來設定陣列的大小。

關於函式返回值

簡單的說,函式就是一個演算法,有不有返回值是跟這個函式做什麼的有關係。
一般情況下,求和這類的就要返回值,比如
int add(int a,int b)
{
return a+b;//這就返回a+b的和,用函式的時候,你只要傳a,b的值就得了
}
用的時候這樣:
int s=add(100,200); //就把100+200也就是300的值賦給s了
這種情況就是相當於你去A地做買東西,你肯定得拿東西回來。你拿回來的東西也就是返回值
-------------------------------------------
還有些不用返回值的,比如,輸出,或者給有地址的變數賦值等 這些函式前面就可以用void 表示無返回值,當然你也可以返回你想返回的。比如說成功或者失敗返回true or false.也可以隨意返回一個int型的 1或者0
比如:
void pri(int i)
{
printf("%d",i);//這個就是列印一個整型的i出來
}
這種就像你去A地不幹什麼,就去那兒吼兩句,也就不用拿什麼回來了。
還有種給有地址的變數賦值。那就相當於你去a地寄了一封信,也不用什麼什麼回來。

啊,打得手累,我就這樣理解了。給是清楚點了,呵呵
例如你要計算5+3=?,這個就需要返回值啦,但你要是排列字元之類的,就不需要返回值,因為它是對字元進行操作,沒有數字。

————————————————
版權宣告:本文為CSDN博主「Hardworking_IC_boy」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/dinghj3/article/details/116583131