C++思考筆記—–Ruminations on C++ 之 代理類的應用

來源:互聯網
上載者:User

          今天一天的課,,所以,對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;

    };

 

-----------------------------------------------------------------------------------------------------------------------------------------------------

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.