• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    C++風格與技巧

    發布: 2008-4-23 16:39 | 作者: 不詳 | 來源: research.att.com | 查看: 123次 | 進入軟件測試論壇討論

    領測軟件測試網



    為什么不能有虛擬構造函數?

    虛擬調用是一種能夠在給定信息不完全(given partial information)的情況下工作的機制。特別地,虛擬允許我們調用某個函數,對于這個函數,僅僅知道它的接口,而不知道具體的對象類型。但是要建立一個對象,你必須擁有完全的信息。特別地,你需要知道要建立的對象的具體類型。因此,對構造函數的調用不可能是虛擬的。

    當要求建立一個對象時,一種間接的技術常常被當作“虛擬構造函數”來使用。有關例子,請參見《C++程序設計語言》第三版15.6.2.節。

    下面這個例子展示一種機制:如何使用一個抽象類來建立一個適當類型的對象。

    struct F { // 對象建立函數的接口

    virtual A* make_an_A() const = 0;

    virtual B* make_a_B() const = 0;

    };

    void user(const F& fac)

    {

    A* p = fac.make_an_A(); // 將A作為合適的類型

    B* q = fac.make_a_B(); // 將B作為合適的類型

    // ...

    }

    struct FX : F {

    A* make_an_A() const { return new AX(); } // AX是A的派生

    B* make_a_B() const { return new BX(); } // AX是B的派生

    };

    struct FY : F {

    A* make_an_A() const { return new AY(); } // AY是A的派生

    B* make_a_B() const { return new BY(); } // BY是B的派生

    };

    int main()

    {

    user(FX()); // 此用戶建立AX與BX

    user(FY()); // 此用戶建立AY與BY

    // ...

    }

    這是所謂的“工廠模式”(the factory pattern)的一個變形。關鍵在于,user函數與AX或AY這樣的類的信息被完全分離開來了。

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>