在用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();
}
下面用一個(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();
}