平常我們一般都是把類的聲明放到頭文件中漠趁,實現(xiàn)文件里面對類的成員函數(shù)進(jìn)行實現(xiàn),如果別人調(diào)用棚潦,只需給調(diào)用者頭文件(而不需要實現(xiàn)過程)從而隱藏了類的實現(xiàn)膝昆,但是,如果我們想把整個類都隱藏掉妹窖,那我們該怎么辦呢收叶?呵呵,看下面代碼
//base.h
#ifndef BASE_H
#define BASE_H
class Base
{
private:
static Base *s_instance;
public:
virtual void func() = 0;
virtual ~Base();
static Base* getInstance();
};
//base.cpp
#include "base.h"
#include <iostream>
using namespace std;
Base* Base::s_instance = NULL;
Base::~Base()
{
}
class Hide : public Base
{
public:
void func()
{
std::cout << "call Hide::func" << std::endl;
}
};
Base* Base::getInstance()
{
if(!s_instance)
{
s_instance = new Hide();
}
return s_instance;
}
//main.cpp
#include "base.h"
int main()
{
Base *base = Base::getInstance();
//我們在這里通過多態(tài)來調(diào)用Hide的成員函數(shù)
base->func();
}
通過上面的代碼蜓萄,大家估計有些感覺了澄峰,呵呵,在main.cpp 中俏竞,我們沒用包含任何Hide類的信息(哪怕是頭文件),但是卻通過base來實現(xiàn)Hide的所有功能玻佩,這就完完全全的隱藏了Hide的聲明和實現(xiàn)席楚。