平常我们一般都是把类的声明放到头文件中,实现文件里面对类的成员函数进行实现,如果别人调用,只需给调用者头文件(而不需要实现过程)从而隐藏了类的实现,但是,如果我们想把整个类都隐藏掉,那我们该怎么办呢?呵呵,看下面代码
//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();
//我们在这里通过多态来调用Hide的成员函数
base->func();
}
通过上面的代码,大家估计有些感觉了,呵呵,在main.cpp 中,我们没用包含任何Hide类的信息(哪怕是头文件),但是却通过base来实现Hide的所有功能,这就完完全全的隐藏了Hide的声明和实现。