C++组成: Package 器从其 Package 的类继承[已关闭]

7hiiyaii  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(118)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

昨天关门了。
Improve this question
一个类有许多纯虚函数。遵循C++组合的概念,为它创建一个 Package 器来提供纯虚函数的具体实现。由于 Package 器和它所 Package 的类的内存占用是相同的,让 Package 器继承类是一个好的实践吗?
下面的代码就是一个例子

class Foo
{
public:
    virtual void method_1() = 0;
    // ...
    virtual void method_n() = 0;
};

class FooWrapper : public Foo
{
public:
    FooWrapper(Foo& foo) : foo_(foo) {}

    void method_1() override {foo_.method_1();}
    // ...
    void method_n() override {foo_.method_n();}

private:
    Foo& foo_;
};

对利弊的明确解释是非常赞赏的。

qxgroojn

qxgroojn1#

class FooWrapper : public Foo
{
    // ...
private:
    Foo foo_;
};

这个类 * 是一个 * Foo**,**它还 * 包含 * 另一个Foo
每个FooWrapper类型的对象包含两个Foo类型的对象:基类子对象和数据成员。
注意,由于问题已经过编辑,我们仍然应该说每个FooWrapper对象都与两个Foo类型的对象 * 关联 *:基类子对象和它所引用的子对象。
这似乎没有任何意义。
您需要首先确定抽象基类和具体实现子类的语义,以及如何使用它们。
例如,“ Package ”某个东西通常意味着隐藏它,而实现一个抽象基类通常意味着公开它的公共接口。它几乎与 Package 相反。除非你想把它隐藏在其他东西里面(或者至少提供一个替代接口),否则你不会 Package 它。
为了达到完美的清晰度:
让 Package 器继承类是一个好的实践吗?
不,它不会实现任何东西,除非你有一些非常具体的情况,你相信它 * 确实 * 实现了一些东西,在这种情况下,你应该问一个关于这种情况的问题。
它的 Package 器被创建来提供纯虚拟功能的具体实现
那不是 Package 器的本质。 Package 器 Package 了一些东西。你知道,就像提供一个外层,它与被 Package 的对象有些不同。公共继承不做这件事,所以一个公共继承的基类在任何意义上都不会被派生类 Package 。

  • 私有 * 继承 * 可以说是 Package 了一些东西,但它只是另一种形式的组合,而且你已经有了组合。

相关问题