class與struct的異同

2021-06-21 22:17:33 字數 820 閱讀 7100

q:結構(struct)與類(class)的區別,你認為結構(struct)有些什麼作用,可以完全用類(class)取代麼?? a:

從語法上,在c++中(只討論c++中)。

class和struct做型別定義時只有兩點區別:

(一)預設繼承許可權。如果不明確指定,來自class的繼承按照private繼承處理,來自struct的繼承按照public繼承處理;

(二)成員的預設訪問許可權。class的成員預設是private許可權,struct預設是public許可權。

除了這兩點,class和struct基本就是乙個東西。語法上沒有任何其它區別。

相同點卻很多:

(1)都可以有成員函式;包括各類建構函式,析構函式,過載的運算子,友元類,友元結構,友元函式,虛函式,純虛函式,靜態函式;

(2)都可以有一大堆public/private/protected修飾符在裡邊;

(3)雖然這種風格不再被提倡,但語法上二者都可以使用大括號的方式初始化:a a = ;不管a是個struct還是個class,前提是這個類/結構足夠簡單,比如所有的成員都是public的,所有的成員都是簡單型別,沒有顯式宣告的建構函式。

(4)都可以進行複雜的繼承甚至多重繼承,乙個struct可以繼承自乙個class,反之亦可;乙個struct可以同時繼承5個class和5個struct,雖然這樣做不太好。

(5)如果說class的設計需要注意oo的原則和風格,那麼沒任何理由說設計struct就不需要注意。

(6)再次說明,以上所有說法都是指在c++語言中,至於在c裡的情況,c裡是根本沒有「class」,而c的struct從根本上也只是個包裝資料的語法機制。

C 類 class 與結構 struct 的異同

結構與類共享幾乎所有相同的語法,但結構比類受到的限制更多 儘管結構的靜態字段可以初始化,結構例項字段宣告還是不能使用初始值設定項。結構不能宣告預設建構函式 沒有引數的建構函式 或析構函式。結構的副本由編譯器自動建立和銷毀,因此不需要使用預設建構函式和析構函式。實際上,編譯器通過為所有字段賦予預設值 ...

Swift中Class和Struct異同

swift 中類和結構體有很多共同點。共同處在於 與結構體相比,類還有如下的附加功能 tip 類的物件是引用型別,而結構體是值型別。所以類的賦值是傳遞引用,結構體則是copy傳值,不是使用引用計數。類和結構體有著類似的定義方式。我們通過關鍵字class和struct來分別表示類和結構體,並在一對大括...

struct與class的區別

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