gpt4 book ai didi

c++ - 使用抽象类的容器来容纳子类

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:02:46 27 4
gpt4 key购买 nike

我想从这个接口(interface)继承几个类:

class IPlayer {

public:
virtual ~IPlayer() {}

virtual void doSomething() = 0;

protected:
std::string m_name;

};

这里有一个类需要从上面继承:

class Jack : public IPlayer {

public:
Jack(std::string t_name)
{
m_name = t_name;
}

~Jack() { }

void doSomething()
{
/* do a bunch of stuff */
}

};

请记住,我们还有其他以相同方式从 IPlayer 继承的类,例如 BobAlice

现在假设我想为 JackBobAlice 创建一个容器,这样我就可以将它们重新组合到同一个变量。在这种状态下,这对我来说是不可能的,因为 IPlayer 没有构造函数,因此不能用作 vector 或列表等对象的模板。 (至少这是我的理解)

IPlayerJack 之间有一个类会更好,它只实现 ctor 和 dtor,然后让其他方法纯虚拟以供利用由 children ;

使 IPlayer(和/或任何 future 的接口(interface))继承自与上述相同的类,该类仅实现 ctor 和 dtor 只是为了使 IPlayer 可用于容器?

最佳答案

其实这些类是没有问题的。 IPlayer 可能是一个抽象类,但您永远不需要创建此类的实例。只要 vector 的元素都指向非抽象子类,您就可以完美地声明一个指向 IPlayer 的指针 vector 。

Jack* j = new Jack("jack");
std::vector<IPlayer*> v = {j};

这段代码非常好,因为没有创建 IPlayer 的实例。

关于c++ - 使用抽象类的容器来容纳子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56509887/

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