最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中結(jié)構(gòu)體與類的使用區(qū)別及說明

 更新時(shí)間:2025年10月14日 09:11:01   作者:IT.Husky  
這篇文章主要介紹了C++中結(jié)構(gòu)體與類的使用區(qū)別及說明,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

在參與以C++為編程基礎(chǔ)的項(xiàng)目應(yīng)用中總會(huì)遇到結(jié)構(gòu)體類型與類的數(shù)據(jù)類型,但是其具體應(yīng)用區(qū)別模糊不清

現(xiàn)將其區(qū)別總結(jié)如下(先介紹C和C++中結(jié)構(gòu)體的不同,再對比C++中結(jié)構(gòu)體與類的區(qū)別)

一、C和C++中結(jié)構(gòu)體的不同

(1)C語言中的結(jié)構(gòu)體不能為空,否則會(huì)報(bào)錯(cuò)

C語言中要求一個(gè)結(jié)構(gòu)或聯(lián)合至少有一個(gè)成員。C語言中,空結(jié)構(gòu)體的大小為0,而C++中空結(jié)構(gòu)體(屬于空類)的大小為1

(2)C語言中的結(jié)構(gòu)體只涉及到數(shù)據(jù)結(jié)構(gòu),而不涉及到算法

在C語言中數(shù)據(jù)結(jié)構(gòu)和算法是分離的。換句話說就是C語言中的結(jié)構(gòu)體只能定義成員變量,但是不能定義成員函數(shù)

然而在C++中既可以定義成員變量又可以定義成員函數(shù), C++中的結(jié)構(gòu)體和類體現(xiàn)了數(shù)據(jù)結(jié)構(gòu)和算法的結(jié)合

不過雖然C語言的結(jié)構(gòu)體中不能定義成員函數(shù),但是卻可以定義函數(shù)指針,不過函數(shù)指針本質(zhì)上不是函數(shù)而是指針,所以總的來說C語言中的結(jié)構(gòu)體只是一個(gè)復(fù)雜數(shù)據(jù)類型 ,只能定義成員變量,不能定義成員函數(shù),不能用于面向?qū)ο缶幊?/p>

(3)C語言中定義結(jié)構(gòu)變量時(shí)不可省略struct關(guān)鍵字,C++可以省略

在C語言中使用struct定義的結(jié)構(gòu)體中在定義變量的時(shí)候,struct不能省略

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

二、C++中結(jié)構(gòu)體與類的區(qū)別

C++中的struct對C中的struct進(jìn)行了擴(kuò)充,它已經(jīng)不再只是一個(gè)包含不同數(shù)據(jù)類型的數(shù)據(jù)結(jié)構(gòu)了,它已經(jīng)獲取了太多的功能

  • struct能包含成員函數(shù)嗎? 能!
  • struct能繼承嗎? 能??!
  • struct能實(shí)現(xiàn)多態(tài)嗎? 能?。?!

既然這些它都能實(shí)現(xiàn),那它和class還能有什么區(qū)別?

最本質(zhì)的一個(gè)區(qū)別就是默認(rèn)的訪問控制: 

默認(rèn)的繼承訪問權(quán)限struct是public的,class是private的

C++中,不使用結(jié)構(gòu)體絲毫不會(huì)影響程序的表達(dá)能力。C++之所以要引入結(jié)構(gòu)體,是為了保持和C程序的兼容性

但有時(shí)仍會(huì)在C++中使用結(jié)構(gòu)體,是因?yàn)榭梢允褂媒Y(jié)構(gòu)體將不同類型數(shù)據(jù)組成整體,方便于保存數(shù)據(jù)(若用類來保存,因類中成員默認(rèn)為私有,還要為每個(gè)數(shù)據(jù)成員特定函數(shù)來讀取和改寫各個(gè)屬性,比較麻煩)

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

struct是一種數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)體,雖然它是可以像class一樣的用。我依舊將struct里的變量叫數(shù)據(jù),class內(nèi)的變量叫成員,雖然它們并無區(qū)別

三、總結(jié)

  • 概念:class和struct的語法基本相同,從聲明到使用,都很相似,但是struct的約束要比class多,理論上,struct能做到的class都能做到,但class能做到的stuct卻不一定做的到
  • 類型:struct是值類型,class是引用類型,因此它們具有所有值類型和引用類型之間的差異
  • 效率:由于堆棧的執(zhí)行效率要比堆的執(zhí)行效率高,但是堆棧資源卻很有限,不適合處理邏輯復(fù)雜的大對象,因此struct常用來處理作為基類型對待的小對象,而class來處理某個(gè)商業(yè)邏輯
  • 關(guān)系:struct不僅能繼承也能被繼承 ,而且可以實(shí)現(xiàn)接口,不過Class可以完全擴(kuò)展。內(nèi)部結(jié)構(gòu)有區(qū)別,struct只能添加帶參的構(gòu)造函數(shù),不能使用abstract和protected等修飾符,不能初始化實(shí)例字段

牛人總結(jié):

(1) 在表示諸如點(diǎn)、矩形等主要用來存儲(chǔ)數(shù)據(jù)的輕量級對象時(shí),首選struct

(2) 在表示數(shù)據(jù)量大、邏輯復(fù)雜的大對象時(shí),首選class

(3) 在表現(xiàn)抽象和多級別的對象層次時(shí),class是最佳選擇 

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

白城市| 望江县| 贵德县| 梨树县| 东平县| 阆中市| 新兴县| 郓城县| 南通市| 岢岚县| 漾濞| 河西区| 湘西| 定安县| 福鼎市| 石狮市| 吉安县| 报价| 金堂县| 驻马店市| 青田县| 石景山区| 安国市| 炎陵县| 扎兰屯市| 福泉市| 邹平县| 富川| 洪江市| 克山县| 洛隆县| 商都县| 前郭尔| 绥化市| 惠州市| 甘德县| 土默特左旗| 南城县| 儋州市| 棋牌| 罗源县|