昨晚阅读Gof的设计模式时,提到Adapter(适配器)有两种,分别为类适配器和对象适配器。其中表明类适配器采用多重继承适配接口。类适配器的关键是用一个分支继承接口,而用另外一个分支继承接口的实现部分。C++中作出这一个区分的方法是:用公共方式继承接口;用私有方式继承接口实现。就借此机会复习一下C++中的私有继承吧!
通过在基类表中去掉public或者显示的声明private,可以私有的继承基类。当私有继承时,创建的新类有基类的所有数据和功能,但是这些功能是隐藏的所以它只是内部实现部分。该类的对象访问不到这些内部功能,并且一个对象不被看作这个基类的成员。当私有继承时,基类的所有public成员都变成了private。如果希望它们中的任何一个是可视的,只有用派生类的public选项申明它们的名字即可。
class base1
{
public:
char f() const { return 'a';} //内联函数,const成员函数
int g() const {return 2;}
float h() const {return 3.0;}
};
class derived : private base1
{
public:
base1::f; //将私有继承成员公有化
};
int main(void)
{
derived d;
d.f(); //可以调用,因为被该私有成员被公有化了
//d.h(); //不能调用,因为是私有函数,不能通过对象来调用
return 0;
}