在用C++寫要導(dǎo)出類的庫時(shí),我們經(jīng)常只想暴露接口,而隱藏類的實(shí)現(xiàn)細(xì)節(jié)。也就是說我們提供的頭文件里只提供要暴露的公共成員函數(shù)的聲明,類的其他所有信息都不會在這個(gè)頭文件里面顯示出來。這個(gè)時(shí)候就要用到接口與實(shí)現(xiàn)分離的技術(shù)。
下面用一個(gè)最簡單的例子來說明。
類ClxExp是我們要導(dǎo)出的類,其中有一個(gè)私有成員變量是ClxTest類的對象,各個(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í)該方法在這里并沒有必要,我這樣只是為了說明調(diào)用關(guān)系
void ClxExp::lxTest()
{
m_lxTest.DoSomething();
}
void ClxExp::DoSomething()
{
lxTest();
}
下面用一個(gè)最簡單的例子來說明。
類ClxExp是我們要導(dǎo)出的類,其中有一個(gè)私有成員變量是ClxTest類的對象,各個(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í)該方法在這里并沒有必要,我這樣只是為了說明調(diào)用關(guān)系
void ClxExp::lxTest()
{
m_lxTest.DoSomething();
}
void ClxExp::DoSomething()
{
lxTest();
}