如何限制对基类的一部分的访问?

时间:2012-11-12 06:20:10

标签: c++ inheritance

我正在尝试仅使用基类的特定部分,同时隐藏其他部分。请考虑以下代码:

struct IX
{
    // ...
};

struct IY
{
    // ...
};

class Base :
    public IX,
    public IY
{
    // Implements IX and IY.
    // ...
};


// Reuse IX implementation, but don't expose IY.
//
class X : protected Base
{
public:
    using Base::IX; // <-- Doesn't exist in C++.
};

我是否可以享受IX提供的Base实施,但不会暴露IY界面?

当然,我可以为using Base::IX::xxx中存在的所有方法键入IX。或者,我可以将所有调用转发给实现,如下所示:

//
class X : public IX
{
public:
    // Forward all calls to IX methods to m_p.
    // ...

protected:
    Base* m_p;
};

但同样,我必须输入IX中可用的所有方法才能转发它们。每次IX更改时,我都必须更新X

感谢。

亚历

1 个答案:

答案 0 :(得分:0)

基本上IXIY的实施受class X保护。您可以将访问器和修饰符公开为类中的公共方法。

另一种方法是公开公开IX来自Base:

class Base : public IX, protected IY
{
    // Implements IX and IY.
    // ...
    // Expose access to IY through base for the class 
    // inheriting from Base
};

class X : public Base 

另一种可能性是不继承IXIY,而是将其作为Base的公开成员:

class Base
{
public:
    IX member1;
    IY member2;
};

通过这种方式,您可以从Base继承受保护,并且可以从class X member1公开单个访问者和修饰符方法。