【发布时间】:2010-10-04 05:27:38
【问题描述】:
我想使用 pimpl idiom 和继承。
这里是基础公共类及其实现类:
class A
{
public:
A(){pAImpl = new AImpl;};
void foo(){pAImpl->foo();};
private:
AImpl* pAImpl;
};
class AImpl
{
public:
void foo(){/*do something*/};
};
并且我希望能够创建派生公共类及其实现类:
class B : public A
{
public:
void bar(){pAImpl->bar();}; // Can't do! pAimpl is A's private.
};
class BImpl : public AImpl
{
public:
void bar(){/*do something else*/};
};
但是我不能在 B 中使用 pAimpl,因为它是 A 的私有的。
所以我看到了一些解决方法:
- 在 B 中创建 BImpl* pBImpl 成员,并使用附加的 A 构造函数 A(AImpl*) 将其传递给 A。
- 将 pAImpl 更改为受保护(或添加 Get 函数),并在 B 中使用。
- B 不应该从 A 继承。在 B 中创建 BImpl* pBImpl 成员,并在 B 中创建 foo() 和 bar(),这将使用 pBImpl。
- 还有其他方法吗?
我应该选择什么?
【问题讨论】:
标签: c++ inheritance oop pimpl-idiom