色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

c語言結構體和類之間的區別舉例

錢衛國2年前16瀏覽0評論

c語言結構體和類之間的區別舉例?

一、C和C++中結構體的不同

(1)C語言中的結構體不能為空,否則會報錯

C語言中要求一個結構或聯合至少有一個成員。C語言中,空結構體的大小為0,而C++中空結構體(屬于空類)的大小為1

(2)C語言中的結構體只涉及到數據結構,而不涉及到算法

在C語言中數據結構和算法是分離的。換句話說就是C語言中的結構體只能定義成員變量,但是不能定義成員函數

然而在C++中既可以定義成員變量又可以定義成員函數, C++中的結構體和類體現了數據結構和算法的結合

不過雖然C語言的結構體中不能定義成員函數,但是卻可以定義函數指針,不過函數指針本質上不是函數而是指針,所以總的來說C語言中的結構體只是一個復雜數據類型 ,只能定義成員變量,不能定義成員函數,不能用于面向對象編程

(3)C語言中定義結構變量時不可省略struct關鍵字,C++可以省略

在C語言中使用struct定義的結構體中在定義變量的時候,struct不能省略

但是在C++之中則可以省略struct

二、C++中結構體與類的區別

C++中的struct對C中的struct進行了擴充,它已經不再只是一個包含不同數據類型的數據結構了,它已經獲取了太多的功能

struct能包含成員函數嗎? 能!

struct能繼承嗎? 能!!

struct能實現多態嗎? 能!!!

既然這些它都能實現,那它和Class還能有什么區別?

最本質的一個區別就是默認的訪問控制:

默認的繼承訪問權限:struct是public的,class是private的

C++中,不使用結構體絲毫不會影響程序的表達能力。C++之所以要引入結構體,是為了保持和C程序的兼容性

但有時仍會在C++中使用結構體,是因為可以使用結構體將不同類型數據組成整體,方便于保存數據(若用類來保存,因類中成員默認為私有,還要為每個數據成員特定函數來讀取和改寫各個屬性,比較麻煩)

struct可以繼承class,同樣class也可以繼承struct

struct是一種數據結構的實現體,雖然它是可以像class一樣的用。我依舊將struct里的變量叫數據,class內的變量叫成員,雖然它們并無區別

三、總結

概念:class和struct的語法基本相同,從聲明到使用,都很相似,但是struct的約束要比class多,理論上,struct能做到的class都能做到,但class能做到的stuct卻不一定做的到

類型:struct是值類型,class是引用類型,因此它們具有所有值類型和引用類型之間的差異

效率:由于堆棧的執行效率要比堆的執行效率高,但是堆棧資源卻很有限,不適合處理邏輯復雜的大對象,因此struct常用來處理作為基類型對待的小對象,而class來處理某個商業邏輯

關系:struct不僅能繼承也能被繼承 ,而且可以實現接口,不過Class可以完全擴展。內部結構有區別,struct只能添加帶參的構造函數,不能使用abstract和protected等修飾符,不能初始化實例字段

java中成員變量是類,c語言結構體和類之間的區別舉例