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
浙公網安備 33010602011771號