c 中的結構 struct

2021-06-20 03:43:21 字數 1413 閱讀 2090

c#中的結構使用struct關鍵字來宣告型別,struct型別是一種值型別,通常用來封裝小型相關變數組,和類是引用型別是不同的,乙個簡單例子

public struct custompoint

public void printpoint() 

,ny=",x,y);}}

幾點說明

1>可以為struct定義建構函式和成員函式,但為結構定義預設(無引數)建構函式是錯誤的,也不能定義析構函式,預設建構函式和析構函式都是編譯器自動建立和銷毀的

2>不能在結構體中初始化例項字段,只能通過兩種方式初始化結構成員:使用引數化建構函式或者是在宣告結構後分別訪問成員

3>struct中對外不可見的成員變數,只能在建構函式中進行初始化

4>結構可以實現介面,但不存在相互繼承關係,同時,結構是從object隱式繼承的,因此,結構成員無法宣告為 protected的

5>當結構包含引用型別作為成員時,必須顯式呼叫該成員的預設建構函式,否則該成員將保持未賦值狀態且該結構不可用

6>struct可以定義在class內部,也可以直接定義在namespace下面

首先說明;使用 new 運算子建立結構物件,則會建立該結構物件,並呼叫適當的建構函式,這並不意味著會分配記憶體,與類分配物件並返回對它的引用不同,結構建構函式直接返回結構值本身(通常是棧上的乙個臨時位置),然後根據需要複製該結構值結構的例項化

class program

, y = ", point1.x, point1.y);

console.write("point2: ");

console.writeline("x = , y = ", point2.x, point2.y);

// keep the console window open in debug mode.

console.writeline("press any key to exit.");

console.readkey();

/* output:

point1: x = 0, y = 0

point2: x = 10, y = 10

*/與類不同,結構的例項化可以不使用 new 運算子,在此情況下不存在構造函式呼叫,因而可以提高分配效率。 但是,在初始化所有字段之前,欄位將保持未賦值狀態且物件不可用

// declare a struct object without "new."

class program

, y = ", point1.x, point1.y);

// keep the console window open in debug mode.

console.writeline("press any key to exit.");

console.readkey();}}

// output: point1: x = 10, y = 20

C 中的結構型別(struct)

有時候,類中只包含極少的資料,因為管理堆而造成的開銷顯得極不合算。這種情況下,更好的做法是使用結構 struct 型別。由於 struct 是值型別,是在棧 stack 上儲存的,所以能有效的減少記憶體管理的開銷 當然前提是這個結構足夠小 結構可以包含它自己的字段 方法和構造器。int 實際上是 s...

C 中的結構型別(struct)

原文 c 中的結構型別 struct 有時候,類中只包含極少的資料,因為管理堆而造成的開銷顯得極不合算。這種情況下,更好的做法是使用結構 struct 型別。由於struct 是值型別,是在棧 stack 上儲存的,所以能有效的減少記憶體管理的開銷 當然前提是這個結構足夠小 結構可以包含它自己的字段...

C 基礎 C 的結構struct

include include using namespace std 在c 中struct和類的區別在於struct不能有方法,所有成員是public的 struct movie 可以指定型別名也可以不指定 movie 可以在宣告struct的時候宣告乙個struct例項,這個有啥意思呢?int ...