基于對象的設(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--更快速,效率更高
