C 中關鍵字Struct和Class的區別

2022-09-26 12:39:17 字數 3361 閱讀 7164

struct和class的區別

今天這篇博文主要講解在c++中關鍵字struct和class的區別。這篇博文,將會系統的將這兩個關鍵字的不同面進行詳細的講解。

從語法上來講,class和struct做型別定義時只有兩點區別:

1.預設繼承許可權,如果不指定,來自class的繼承按照private繼承處理,來自struct的繼承按照public繼承處理;

2.成員的預設訪問許可權。class的成員預設是private許可權,struct預設是public許可權。以上兩點也是struct和class最基本的差別,也是最本質的差別;

但是在c++中,struct進行了擴充套件,現在它已經不僅僅是乙個包含不同資料型別的資料結構了,它包括了更多的功能。

struct能包含成員函式嗎?

是的,答案是肯定的。現在就讓我寫一段**驗證一下:

複製** **如下:

/*** filename     : structandclassdiffdemo

** author       : jelly young

** date         : 2013/12/7

** description  : more information, please go to  

#include

using namespace std;

struct test

void seta(int temp)

}; int main(int argc, char* ar**)

以上的**會很正確的執行,是的;沒錯,struct能包含成員函式的。

struct有自己的建構函式嗎?

是的,可以的。看以下測試**:

複製** **如下:

/*** filename     : structandclassdiffdemo

** author   程式設計客棧    : jelly young

** date         : 2013/12/7

** description  : more information, please go to  

#include

using namespace std;

struct test

int geta()

void seta(int temp)

}; int main(int argc, char* ar**)

struct可以有析構函式麼?

讓我來驗證一下:

複製** **如下:

/*** filename     : structandclassdiffdemo

** author       : jelly young

** date         : 2013/12/7

** description  : more information, please go to  

#include

using namespace std;

struct test

int geta()

void seta(int temp)

~test()

}; int main(int argc, char* ar**)

是的,完全支援析構函式。

struct支援繼承麼?

再讓我寫**驗證一下:

複製** **如下:

/*** filename     : structandclassdiffdemo

** author       : jelly young

** date         : 2013/12/7

** description  : more information, please go to  

#include

using namespace std;

struct a

void print()

}; struct b : a

/*void print()

*/}; 

int main(int argc, char* ar**)

執行上述**,struct支援繼承。

struct支援多型麼?

寫**測試一下便知:

複製** **如下:

/*** filename     : structandclassdiffdemo

** author       : jelly young

** date         : 2013/12/7

** description  : more information, please go to  

#include

using namespace std;

struct a; 

struct b : a}; 

struct c : a

}; int main(int argc, char* ar**)

struct支援private、protected和public關鍵字麼?

複製** **如下:

/*** filename     : structandclassdiffdemo

** author       : jelly young

** date         : 2013/12/7

** description  : more information, please go to  

#include

using namespace std;

btqhtxp

struct a

int d;}; 

struct b : a; 

// private member can not see

/*void printa_b()

*/void printa_d()

}; int main(int argc, char* ar**)

寫了這麼多了,那麼會出現這種乙個狀況,如果是class的父類是struct關鍵字描述的,那麼預設訪問屬性是什麼?

當出現這種情況時,到底預設是public繼承還是private繼承,取決於子類而不是基類。class可以繼承自struct修飾的類;同時,struct也可以繼承自class修飾的類,繼承屬性如下列描述:

複製** **如下:

class b:a{}; // private 繼承

class a{};

struct b:a{}; // public 繼承

最後,那麼到底是使用struct,還是使用class呢?這個看個人喜好,但是這裡有乙個程式設計規範的問題,當你覺得你要做的更像是一種資料結構的話,那麼用struct,如果你要做的更像是一種物件的話,那麼用class。

本文標題: c++中關鍵字struct和class的區別

本文位址:

C 中struct關鍵字和class關鍵字的區別

剛開始接觸 c 看到 中有struct關鍵字,還以為是用了結構體,結果後來發現 struct 和 class 一樣都用於類的定義,於是把兩者的差別記錄於此。一句話總結 兩者均可用於定義類,唯一的區別是兩者定義的類的預設訪問許可權有差別。其實比兩者差別更重要的是,我很好奇為什麼 c 中會存在兩個用於定...

C 中as和is關鍵字

一.as 運算子用於在相容的引用型別之間執行某些型別的轉換。例如 static void main string args else console.readline 結果 not a string hello not a string class base class derived base c...

關鍵字class與struct

面試中偶有考官問道 class 和struct 有什麼區別?回答大多千篇一律 嗯,struct 中預設的訪問許可權是 public 而class 中則是private 其實這個回答並不完整。為什麼c 中會存在兩個如此相似的關鍵字?其實 struct 的存在僅僅是為了保證 c 對 c的相容性罷了。如此...