C struct和class的區別

2022-08-27 19:24:11 字數 1648 閱讀 9358

在c++中我們可以看到struct和class的區別並不是很大,兩者之間有很大的相似性。那麼為什麼還要保留struct,這是因為c++是向下相容的,因此c++中保留了很多c的東西。

struct

a;

注意:因為struct是一種資料型別,那麼就肯定不能定義函式,所以在面向c的過程中,struct不能包含任何函式。否則編譯器會報錯

面向過程的程式設計認為,資料和資料操作是分開的。然而當struct進入物件導向的c++時,其特性也有了新發展,就拿上面的錯誤函式來說,在c++中就能執行,因為在c++中認為資料和資料物件是乙個整體,不應該分開,這就是struct在c和c++兩個時代的差別。

在c++中struct得到了很大的擴充:

1.struct可以包括成員函式

2.struct可以實現繼承

3.struct可以實現多型

1.預設的繼承訪問權。class預設的是private,strcut預設的是public

structa;

struct

b: a

;

例如上邊的**,strcut b就是公有繼承(public)的struct a。如果將strcut變為 class 那麼將會是私有繼承(private)這裡就不做展示了。所以我們在寫類的時候都會顯示的寫出是公有繼承還是私有繼承 

當然,到底預設是public繼承還是private繼承,取決於子類而不是基類。我的意思是,struct可以繼承class,同樣class也可以繼承struct,那麼預設的繼承訪問許可權是看子類到底是用的struct還是class。如下:

structa;

struct b: a //

共有繼承;

class c: a //

私有繼承

;

2.預設訪問許可權:struct作為資料結構的實現體,它預設的資料訪問控制是public的,而class作為物件的實現體,它預設的成員變數訪問控制是private的。

structa;

intmain() //

可以在類外訪問成員變數,所以struct預設是共有的

classb;

intmain() //

在內外無法訪問私有變數

3.「class」這個關鍵字還用於定義模板引數,就像「typename」。但關鍵字「struct」不用於定義模板引數

從上面的區別,我們可以看出,struct更適合看成是乙個資料結構的實現體,class更適合看成是乙個物件的實現體。

4.class和struct在使用大括號上的區別

關於使用大括號初始化

1.)class和struct如果定義了建構函式的話,都不能用大括號進行初始化

2.)如果沒有定義建構函式,struct可以用大括號初始化。

3.)如果沒有定義建構函式,且所有成員變數全是public的話,class可以用大括號初始化。

雖然感覺struct是多餘的,但考慮到「對c相容」就將struct保留了下來,並做了一些擴充套件使其更適合物件導向,所以c++中的struct再也不是c中的那個了。

兩者最大的區別就在於思想上,c語言程式設計單位是函式,語句是程式的基本單元。而c++語言的程式設計單位是類。從c到c++的設計有過程設計為中心向以資料組織為中心轉移。

—————————————

C struct和class的比較

什麼是class?class是我們通常所說的類,是物件導向程式設計的基本概念,一種可以自定義的資料結構型別,c 中的class 通常包含字段 屬性 方法 建構函式 索引器 操作符等等。在.net中,所有的類都最終繼承自system.object類,因此是一種引用型別,也就是說,new乙個類的例項時,...

C struct和class的比較

什麼是class?c 中的class 通常包含字段 屬性 方法 建構函式 索引器 操作符等等。在.net中,所有的類都最終繼承自system.object類,因此是一種引用型別,也就是說,new乙個類的例項時,例項的值儲存在託管堆 managed heap 中,而類的例項在堆疊 stack 上存放的...

C struct和class的區別

在c 中我們可以看到struct和class的區別並不是很大,兩者之間有很大的相似性。那麼為什麼還要保留struct,這是因為c 是向下相容的,因此c 中保留了很多c的東西。struct a 注意 因為struct是一種資料型別,那麼就肯定不能定義函式,所以在面向c的過程中,struct不能包含任何...