很多人對於C++中struct與Class的區別不是很了解,認為在C++中struct與Class可以說是沒有區別,但是又可以說是很大區別。希望對大家能有所幫助。
因為C++要向下兼容C。所以C具有的東西,那麼在C++裡也具有。所以談struct應該是從C談起。struct在C中:struct是一種自定義的數據類型。既然是一種數據類型那麼就肯定不能定義函數。C是面向過程的,面向對象的東西它自然也不具有。struct在C++中;
C++是面向對象的。根據對象的思想,struct應該是等價於CLassC是沒有Class這個東西的)。這裡我們又引出了一個很大的話題,面向過程和面向對象的區別。這裡我們只選其中很小的一部分來說。
面向過程認為,數據和數據的操作是分開的。當然面向過程也可以刻意的實現把數據和數據的操作集合到一起) 面向對象認為,數據和數據的操作是一個整體,不應該分開的。
這樣面向對象就和面向過程有了很大的沖突。這個沖突其實引發了struct的C和C++的差異性。C++中struct是可以包含函數的,可以擁有構造函數,析構函數同樣擁有繼承等能力。這個時候。。
很多人就會疑惑?那struct和CLASS不就一樣了嗎?對struct和class的確差別不大。從使用上差別不大。使用上的差別唯一的就是默認訪問類型不一樣struct默認私有,class默認公有。肯定就有朋友會問,平常我們都不會依賴於默認啦,不同的編譯器可能默認方式都不一樣的。照這個思維不就是完全沒區別了。對我說的很大區別,其實針對的是思想上並非使用上。
第一:struct是繼承於C但又要適合於面向對象。所以struct是丟也不是,留下又多余的尴尬局面。
第二:C++中struct已經被擴展,已經不再是C時代的struct
那麼最大的思想差別是啥呢?我也說不清楚。思想的東西我覺得,是要靠感悟的,可能從我嘴來說出來的思想,在你眼裡可能是狗屁不通,甚至是一堆臭雞蛋。所以下面我說一個我認為的C++中struct思想。
在面向對象橫行的時代。相信大家都對幾個面向對象詞語有很深的認識,對象,類,接口,繼承等等。 但是大家留心會發現,C++裡面沒有“接口”這個東西。說起接口這個東西,就不能不說JAVA了,在JAVA裡是不允許多繼承的。
但是能實現繼承多個接口。但是C++卻是允許實現多繼承,那麼如果C++裡出現接口這個東西,最後的結果也會變成多余。但是接口這個思想在面向對象裡可以說是得到了高度的發展。甚至形成了面向方面編程AOP其實就是針對接口編程的一種深化)。
所以我覺得“接口”其實已經在面向對象裡形成了一種文化。但是作為編程界翹楚的C++卻沒有“接口”這樣東西。人的思維是強大的,例如MS的做法就是將struct當成了接口來使用。所以我覺得C++中的struct和class區別不是在於使用,不在於語法糖,而是在於思想,在於構架約定等方面。