gpt4 book ai didi

C++ - 在父类中定义子类

转载 作者:行者123 更新时间:2023-11-28 04:44:43 30 4
gpt4 key购买 nike

在处理个人项目时,我发现自己处于一种情况,我想为我的抽象父类的子类创建可重用的代码块,这些子类可以实现其中的一些纯虚拟方法。为此,我创建了一个在主要子类之后继承的中间父类。但是,由于项目中最终子类的性质,除了子类之外的任何对象都可以访问中间父类是没有意义的。因此,我创建了这种类型的类结构:

class Foo
{
protected:
class Bar : protected Foo
{
public:
void a()
{
//implementation of a()
}
};

public:
virtual void a() = 0;
virtual void b() = 0;
};

class Beep : public Foo, private Foo::Bar
{
void b()
{
//implementation of b()
}
};

(我知道菱形继承(钻石问题)问题和其他通过多个来源从祖先类继承引起的问题。为了这个问题的目的,请假设它不是问题,因为它不是重点。)

在尝试将 Foo 定义为 Bar 的父项时,上述代码会导致“不允许不完整的类型”错误。有没有一种方法可以重构代码以消除错误,同时保持所需的类/可访问性结构?

虽然我对如何实现我所描述的内容很感兴趣(此时主要是出于好奇),但我会接受替代解决方案,只要它们导致匹配的行为,即:代码实现抽象基础的部分类仅对在所述基类之后继承的对象可见/可访问。

最佳答案

您可以转发声明Bar并在Foo之后定义它。

class Foo
{
protected:
class Bar;

public:
virtual void a() = 0;
virtual void b() = 0;
};

class Foo::Bar : protected Foo
{
public:
void a()
{
//implementation of a()
}
};

关于C++ - 在父类中定义子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49471421/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com