问题:我们经常扩展别人写好一个类的功能,为了防止别人错误地使用我们扩展的功能,我们需要屏蔽直接调用原基类的功能。例如:
class base{
public:
void Do(){}
void Add(base* pBase){}
void Remove(base* pBase){}
};
//我们扩展base的Add, Remove功能,在这两个函数里需要处理一些derive内部自己的数据。若用户直接调用Add, Remove。Derive的一些内部数据得不到处理,则可能会导致其他的调用会出错。解决方法有两种。
1)私有派生,将直接可以调用函数公有化。
class derive: private base{
public:
base::Do;
void AddEx(base* pBase){}
void RemoveEx(base* pBase){}
};
2)公有派生,将不能直接调用的函数私有化。
class derive: public base{
private:
base:: Add;
base:: Remove;
public:
void AddEx(base* pBase){}
void RemoveEx(base* pBase){}
};
void call()
{
derive d;
//d.Add(NULL); //编译错误
d.AddEx(NULL);
d.Do();
}