C++中接口與實(shí)現(xiàn)分離的技術(shù)

字號(hào):

在用C++寫(xiě)要導(dǎo)出類(lèi)的庫(kù)時(shí),我們經(jīng)常只想暴露接口,而隱藏類(lèi)的實(shí)現(xiàn)細(xì)節(jié)。也就是說(shuō)我們提供的頭文件里只提供要暴露的公共成員函數(shù)的聲明,類(lèi)的其他所有信息都不會(huì)在這個(gè)頭文件里面顯示出來(lái)。這個(gè)時(shí)候就要用到接口與實(shí)現(xiàn)分離的技術(shù)。
    下面用一個(gè)最簡(jiǎn)單的例子來(lái)說(shuō)明。
     類(lèi)ClxExp是我們要導(dǎo)出的類(lèi),其中有一個(gè)私有成員變量是ClxTest類(lèi)的對(duì)象,各個(gè)文件內(nèi)容如下:
     lxTest.h文件內(nèi)容:  
    class ClxTest
    {
    public:
     ClxTest();
     virtual ~ClxTest();  
     void DoSomething();
    };  
     lxTest.cpp文件內(nèi)容:  
    #include "lxTest.h"  
    #include
    using namespace std;  
    ClxTest::ClxTest()
    {
    }  
    ClxTest::~ClxTest()
    {
    }  
    void ClxTest::DoSomething()
    {
     cout << "Do something in class ClxTest!" << endl;
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
    lxExp.h文件內(nèi)容:  
    #include "lxTest.h"  
    class ClxExp  
    {
    public:
     ClxExp();
     virtual ~ClxExp();  
     void DoSomething();  
    private:
     ClxTest m_lxTest;  
     void lxTest();
    }; 
    lxExp.cpp文件內(nèi)容:  
    #include "lxExp.h"  
    ClxExp::ClxExp()
    {
    }  
    ClxExp::~ClxExp()
    {
    }  
    // 其實(shí)該方法在這里并沒(méi)有必要,我這樣只是為了說(shuō)明調(diào)用關(guān)系
    void ClxExp::lxTest()
    {
     m_lxTest.DoSomething();
    }  
    void ClxExp::DoSomething()
    {
     lxTest();
    }