我正在尝试仅使用基类的特定部分,同时隐藏其他部分。请考虑以下代码:
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
。
感谢。
亚历
答案 0 :(得分:0)
基本上IX
和IY
的实施受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
另一种可能性是不继承IX
和IY
,而是将其作为Base
的公开成员:
class Base
{
public:
IX member1;
IY member2;
};
通过这种方式,您可以从Base继承受保护,并且可以从class X
member1
公开单个访问者和修饰符方法。