struct 和class到底有什麼區別

2021-09-25 08:43:46 字數 1969 閱讀 7053

我們知道struct是c語言的寵兒,當需要乙個複雜型別的時候就需要定義乙個struct

比如乙個學生結構體,含有三個屬性,分別是編號、名字和年齡。

1 typedef struct

student

2;

當我們用乙個鍊錶將他們存起來,即指標指向struct,然後便可以對所有學生進行檢視、刪除、修改和增加,這不就是你曾經做過的簡單學生管理系統嗎??

你甚至可以在struct內部定義實現函式,比如:

vc++ 6.0編譯

1 typedef struct

student211

12int

getage()

1316

17student()

1822 };

1

intmain()

2

vs2017編譯

1

struct

mystruct214

void setage(int

_age)

1518

intgetage()

1922 };

甚至,你可以為屬性和操作加上限定public,private限定,沒有問題。

1

public:2

intid;

3char name[20];4

private:5

int age;

到這兒,你可能會疑惑了:用類來實現不是差不多嗎?

試一下

1

class

myclass2;

5 ~myclass() {};67

void setage(int

_age)811

intgetage()

1215

public:16

intid;

17char name[20

];18

private:19

intage;

20 };

你沒看錯,就是只要把關鍵字struct換成class就可以了。功能完全相同。

進而,你可以試試繼承、多型,struct完全可以像class那樣實現。

好了,問題來了

struct和class有什麼區別?核心區別就只有一條,預設的讀取許可權不同。struct是public,而class是private。

我們可以看下面例子。(屬性不做限制,再看他們的讀取許可權)

結果是,struct可以正常讀取,而class因為預設是private所以無法讀取屬性。

還有其他區別嗎?class可用於宣告類模板,而struct不可以

即struct不是模板型別,不可做為型別模板引數。

summary:

1. 預設許可權(struct-public, class-private)

2. 是否可用於宣告模板(struct不可以, class可以)

其實,推敲他們的區別,沒什麼意義。在使用過程中用你習慣的那種方式,即單純宣告資料集合體就用struct,有屬性和操作就用class,就可以了。

參考資料

到底有多二

7 3 到底有多二 15 分 乙個整數 犯二的程度 定義為該數字中包含2的個數與其位數的比值。如果這個數是負數,則程度增加0.5倍 如果還是個偶數,則再增加1倍。例如數字 13142223336是個11位數,其中有3個2,並且是負數,也是偶數,則它的犯二程度計算為 3 11 1.5 2 100 約為...

到底有多少記憶體

在虛擬記憶體模型下,理論上有 2gb的記憶體供程式使用。當 virtualalloc 或者其他函式提交虛擬記憶體時,虛擬記憶體管理器就開始消耗 ram。當物理記憶體將被消耗完時,管理器就開始將記憶體頁面對映到硬碟。在預設的設定下,作業系統會用硬碟的所有可用空間來作為磁碟交換檔案。因此,記憶體的限制並...

到底有多二

l1 017 到底有多二 15 分 乙個整數 犯二的程度 定義為該數字中包含2的個數與其位數的比值。如果這個數是負數,則程度增加0.5倍 如果還是個偶數,則再增加1倍。例如數字 13142223336是個11位數,其中有3個2,並且是負數,也是偶數,則它的犯二程度計算為 3 11 1.5 2 100...