今天一天的課,,所以,對Ruminations on C++的學習只能用中午的30分鐘,
-----------------------------------------------------------------------------------------------------------------------------------------------------
代理類:
1>引入條件.
類的多態性在編程中是那麼的實用,,我們可以用一個純虛的父類指標去操作它所有子類的對象,這讓我們在編程的時候變的很輕鬆,和方便.
我們可以很容易的用一些模板容器或自己定義的資料結構去管理一類的東西,(比如,可以把各種職業的人放到一起管理.)
現在的解決方案是這樣的..
People * peoples[100];
這裡People就是一個虛基類,這個數組可以用來管理100個Teacher,Doctor..等等的執行個體...
2>C++的解決方案
其實上面的方法已經能很好地去解決我們的問題.可是它會帶來指標管理的問題.這在C++中是不被提倡的.
一個好的C++設計,應該避免直接使用指標,針對新的問題,我們的代理類出現了.
3>代理類
我們的代理類現在要解決兩個問題.一是.對指標進行封閉管理,二是,它不能去影響被代理的純虛父類的職能.
一個People的代理類如下.:
class PeopleSurrogate {
public:
//建構函式
PeopleSurrogate () : p(0){ }
PeopleSurrogate (const People &tp) : p(tp.copy()){} //copy為People類的一個複製自身的成員函數
PeopleSurrogate (const PeopleSurrogate &ps) : p(ps.p? ps.p->copy : 0){}
//當然,還應該實現operator=(),這個和拷貝構造差不多.
~PeopleSurrogate();
//People的功能函數
void look(){
p->look();
}
private:
People *p;
};
-----------------------------------------------------------------------------------------------------------------------------------------------------