struct 及與class的區別

2021-06-21 16:09:49 字數 1252 閱讀 4229

一.函式引數:

1.傳值:

傳值時結構體引數會被拷貝乙份,在函式體內修改結構體成員不能改變呼叫引數。在這種情況下,由於涉及到結構體引數的拷貝,程式空間及時間效率都會受到影響,這種方法基本不用。

2.傳指標:

傳指標是直接將結構體的首位址傳遞給函式體,在函式體中通過指標引用結構體成員,可以對結構體引數成員的值造成實際影響,這種用法效率高,經常採用。 如:

struct tagstustudent;

void fun(student *pstu)student;

student fun();

int _tmain(int argc, _tchar* argv)

student fun()

以指標方式返回結構體如下:

student* fun()

三.結構體和類的比較

結構是一種用關鍵字struct宣告的自定義資料型別。與類相似,也可以包含建構函式,常數,字段,方法,屬性,索引器,運算子和巢狀型別等,不過,結構是值型別。

1.結構的建構函式和類的建構函式不同。

a.結構不能包含顯式的無引數建構函式。結構成員將自動初始化為它們的預設值。

b.結構不能包含以下形式的初始值設定類:base(argument-list);

2.對於結構中的例項字段成員,不能在宣告時賦值初始化。

3.宣告了結構型別後,可以使用new運算子建立構造物件,也可以不使用new關鍵字。如果不使用new,那麼在初始化所有字段之前,欄位將保持未賦值狀態且物件不可用。

4.結構不支援繼承,即乙個結構不能從另乙個結構或類繼承,而且不能作為乙個類的基類。但是,結構從基類object繼承。結構也可以實現介面。

5.結構在堆疊中建立,是值型別;類在堆中建立,是引用型別。

6.struct預設為public,class預設為private。

四.總結

結構體:

「沒有預設的建構函式,但可以新增建構函式」      「沒有析構函式」      「沒有abstract和sealed(因為不能繼承)」      「不能有protected修飾符」      「可以不適用new初始化」      「在結構中初始化例項欄位是錯誤的」 類:

「有預設的建構函式」      「有析構函式」      「可以使用abstract和sealed」      「有protected修飾符」      「必須使用new初始化」

摘自:

Swift中 Class和Struct的區別

1.記憶體管理方式不一樣,類引用型別,分配在堆上。結構體值型別,分配在棧上。2.類,有析構。結構體不能有析構,playground中測試直接卡死。3.結構體建構函式,會自動生成帶引數的構造器。類不會對有初始化賦值的屬性,生成帶引數的構造器。2.類有繼承特性,結構體沒有繼承特性,自然也不存在對成員屬性...

struct與class的區別

如何選擇結構還是類 一 類與結構的示例比較 結構示例 public struct person 類示例 public class testtime 呼叫過程 public class test 從上面的例子中我們可以看到,類的宣告和結構的宣告非常類似,只是限定符後面是 struct 還是 class...

class與struct的區別

類與結構的例項比較 類與結構的差別 如何選擇結構還是類 一 類與結構的示例比較 結構示例 public struct person 類示例 public class testtime 呼叫過程 public class test 從上面的例子中我們可以看到,類的宣告和結構的宣告非常類似,只是限定符後...