第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C++的成員函數(shù)和普通函數(shù)?

C++的成員函數(shù)和普通函數(shù)?

PHP
慕田峪4524236 2019-01-27 09:05:27
C++的成員函數(shù)和普通函數(shù)
查看完整描述

2 回答

?
精慕HU

TA貢獻1845條經(jīng)驗 獲得超8個贊

首先要知道類存在的理由,為何要面向?qū)ο?/a>。

C中的結(jié)構(gòu)體就是定義一種數(shù)據(jù)格式,可以存儲若干數(shù)據(jù)元素,并且它們的內(nèi)存是連續(xù)的。

結(jié)構(gòu)體的作用是封裝一組有關(guān)聯(lián)的屬性,它們共同維護某種概念實體的狀態(tài)。

在早期經(jīng)典純C工程當(dāng)中,有經(jīng)驗的開發(fā)者早就開始利用結(jié)構(gòu)體與函數(shù)指針實現(xiàn)簡單的面向?qū)ο?/a>。

但是用結(jié)構(gòu)體+函數(shù)指針使用不方便不靈活,所以C++最大的使命,面向?qū)ο?/a>就誕生了。

要注意的是C++與C的區(qū)別除了類之外,還有函數(shù)多態(tài)的特性、命名空間、STL等等特性。


類相比于結(jié)構(gòu)體+函數(shù)指針最大的優(yōu)勢就是兩個字:繼承


撤了一大堆廢話,針對LZ的問題可以歸結(jié)為,在沒有屬性的時候,只有函數(shù),使用類好不好,或者說何時可以如此使用。


如果LZ學(xué)習(xí)過設(shè)計模式,那么這個問題就頗為清晰,類的存在是為了更靈活地描述某種概念實體以及對它的操作。


一個只有函數(shù)而沒有屬性的類,其描述的實體可以認為是一種抽象的動作實體。


用通俗的話來講,一個繼承Animal的Cat類描述一個貓,貓有屬性(形態(tài),叫聲,年齡等),也有動作(吃喝拉撒睡),這就是最經(jīng)典LZ也熟知的一種類。


而抽象的動作類,就有比如一個繼承File的DiskFile或者FtpFile等,它主要描述的是一組動作(讀與寫),它也許有狀態(tài)(屬性),也許沒有。


這種抽象的動作類為何而存在?經(jīng)典的策略設(shè)計模式就會大量地使用這種寫法。


比如你要做視頻處理軟件,視頻需要解碼與加碼如果只是用純函數(shù)的化你的代碼就會如下丑陋:

1234567891011if(0 == strcmp(fileType, AVI)) {    decode_AVI(file);else if(0 == strcmp(fileType, MP4)) {    decode_MP4(file);}.....if(0 == strcmp(fileType, AVI)) {    encode_AVI(file);else if(0 == strcmp(fileType, MP4)) {    encode_MP4(file);}

但是如果你有一個類AVType,只有兩個函數(shù):encode、decode,然后有AVIType、MP4Type繼承它,那么你的代碼大致就是:

1234AVType* type = new AVIType(); // or MP4Typetype->decode(file);....type->encode(file);

當(dāng)你的同類方法多起來(如rmvb、wmv、flv解碼器等等),你就會發(fā)現(xiàn)后者有多優(yōu)秀。


最后總結(jié)對LZ的問題的回答就是:

如果沒有繼承也不會存在潛在繼承的可能,也就是說用不到C++的多態(tài)特新,那么沒有屬性的類就沒有存在的必要。





查看完整回答
反對 回復(fù) 2019-03-19
  • 2 回答
  • 0 關(guān)注
  • 915 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號