gpt4 book ai didi

C++ 在另一个类中实例化一组具有相同构造函数的类中的类类型变量

转载 作者:行者123 更新时间:2023-11-28 02:02:16 24 4
gpt4 key购买 nike

我在 C++ 方面并不先进。假设我有一组类,从 A 到任何(数量会随着时间增长),它们都使用相同类型的构造函数。假设它看起来像这样:

class A
{
private:
double m_x, m_y;
public:
A(const double &x, double &y, const short &n) { ... };
};

这些类中的每一个都有相同的 m_x, m_y 变量,但它们的计算方式不同。现在有另一个类,比如 Bla,它需要使用前一组类的构造函数,如下所示:

class Bla
{
private:
Class m_class;
public:
Bla(const double &x, const double &y, const double &z, const short &i)
{
switch (i)
{
case 1: m_class = A::A(...); break;
case 2: m_class = B::B(...); break;
...
}
}
};

构造函数中的开关(i)根据i选择组中的一个构造函数。如何使 Bla 中的 Class m_class 变量与构造函数中的 switch (i) 保持一致?我应该选择什么类型的变量,或者如何选择?

或者,m_class 只需要保存来自组中的一个类的 m_x, m_y 变量,以便进一步处理/计算/等等,是吗这样做的另一种方法?我希望我已经弄清楚了这一点。

最佳答案

你可以有一个带有那些公共(public)成员变量的接口(interface)类

class I
{
public:
virtual ~I() = default;
protected:
double m_x, m_y;
};

然后从中派生您的具体类,每个类将以不同方式填充m_xm_y

class A : public I
{
public:
A(const double &x, double &y, const short &n) { ... };
};

然后您的 Bla 构造函数本质上充当工厂并根据您的 i 参数生成特定类型的 I

class Bla
{
private:
std::unique_ptr<I> m_class;
public:
Bla(const double &x, const double &y, const double &z, const short &i)
{
switch (i)
{
case 1: m_class = std::unique_ptr<I>(new A(...)); break;
case 2: m_class = std::unique_ptr<I>(new B(...)); break;
...
}
}
};

关于C++ 在另一个类中实例化一组具有相同构造函数的类中的类类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38976921/

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