Week3(Boolan)

基于對象的設(shè)計OOD--------->面向?qū)ο蟮木幊蘋OP(類之間的關(guān)系)

復(fù)合Composition:設(shè)計模式Adapter,選擇功能已經(jīng)很強(qiáng)大的類中的一些函數(shù)開放,更改名字或接口

template <class T,class Sequence = deque<T> >

...

protected: Sequence c;//底層容器,即deque<T> c;

queue先進(jìn)先出,deque兩端都可以進(jìn)出。

構(gòu)造由內(nèi)而外,析構(gòu)由外而內(nèi)。

Container::Container():Component(){...};//Component內(nèi)可能有多個構(gòu)造函數(shù),當(dāng)不想使用默認(rèn)的構(gòu)造函數(shù)時,斜體加粗部分需指明哪些參數(shù)。




委托Delegation

也是“擁有”的關(guān)系,但是通過指針,也叫Composition by reference。生命周期與Composition不同,指針指向的class被需要時才會被創(chuàng)建。

pimpl( pointer to implementation) 別名 Handle/Body,編譯防火墻:

指針指向不同的實(shí)現(xiàn)類,服務(wù)器端如何實(shí)現(xiàn)都不影響客戶端

引用計數(shù):

三個字符串共享“Hello”的內(nèi)容,節(jié)省內(nèi)存。如果想通過指針a更改"Hello"的內(nèi)容,則copy一份給a改,copy on write.



繼承inheritance

形式:classname1 public: classname2:{}

三種繼承:private、protected、public.

父類base的數(shù)據(jù)被完整繼承到子類derived(通過內(nèi)存),函數(shù)的繼承是通過繼承調(diào)用權(quán)。子類包含父類的一部分,和復(fù)合相同,構(gòu)造由內(nèi)(父類的構(gòu)造函數(shù))而外(子類的),析構(gòu)由外而內(nèi)。



虛函數(shù)virtual function

形式:在任何成員函數(shù)前都可加上virtual。

父類可以有多個子類,當(dāng)成員函數(shù)被聲明為純虛函數(shù)時,所有子類都必須去定義它


設(shè)計模式Template Method:application framework與application分開,關(guān)鍵部分延緩放到子類里設(shè)計。通過子類對象調(diào)用父類函數(shù)。例如:MFC

mydoc.onfileopen(); 等同于 cdocument::onfileopen(&mydoc) mydoc作為this pointer

而在執(zhí)行父類的函數(shù)時,遇到serialize();時,對編譯器來說是this->serialize();

Composite:

在容器中存放的必須是相同大小的東西,如指針

包含自身和其他東西時,可設(shè)計兩者的父類,使指針指向父類。

Prototype:

創(chuàng)建未來的子類,子類創(chuàng)建自己,而父類能夠看到并復(fù)制子類,創(chuàng)建靜態(tài)的自己---->調(diào)用私有構(gòu)造函數(shù),add prototype(this),將原型加到父類的原型容器中(自己允許調(diào)用自己的私有函數(shù))----->clone函數(shù)(new一個自己),通過原型這個對象調(diào)用findandclone()來找到需要的原型指針來調(diào)用clone函數(shù),再次調(diào)用clone函數(shù)new的自己需調(diào)用一個新的構(gòu)造函數(shù)(protected或private都可以,可通過加一個用不到的參數(shù)和之前的構(gòu)造函數(shù)區(qū)分開),靜態(tài)函數(shù)雖然不需要對象就能調(diào)用,但需要class nameclass內(nèi)的靜態(tài)變量必須在class本體外做一次定義(給內(nèi)存)

參考延伸資料

做作業(yè)時查的和QQ群里交流學(xué)到的

基類即父類,派生類即子類


有public, protected, private三種繼承方式,它們相應(yīng)地改變了基類成員的訪問屬性。

1.public繼承:基類public成員,protected成員,private成員的訪問屬性在派生類中分別變成:public, protected, private

2.protected繼承:基類public成員,protected成員,private成員的訪問屬性在派生類中分別變成:protected, protected, private

3.private繼承:基類public成員,protected成員,private成員的訪問屬性在派生類中分別變成:private, private, private

但無論哪種繼承方式,上面兩點(diǎn)都沒有改變:

1.private成員只能被本類成員(類內(nèi))和友元訪問,不能被派生類訪問;

2.protected成員可以被派生類訪問


using namespace std;//要寫分號?。∵@也是我為什么總在int main()函數(shù)的int上看見提示 應(yīng)輸入; 。。。。。。

在VS2017里,項目里的文件改過名字后會提示錯誤“必須定義入口點(diǎn)”

這周作業(yè)還粗心大意地把前面聲明的變量名字在后面引用時抄錯了,時間緊迫也沒來得及發(fā)現(xiàn)并改正了。。。。。。

在不作為右值賦給變量時,意思相同,但++i、--i比i++、i--更快速,效率更高

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容