gpt4 book ai didi

c++ - 如何编写一个函数来根据类名参数为不同的类创建不同的对象?

转载 作者:太空宇宙 更新时间:2023-11-04 12:23:49 24 4
gpt4 key购买 nike

我需要编写一个可以创建任何类型对象的函数。它接收类名作为参数。如果类相似,我们可以从单个基类派生所有这些类,并让函数返回 Base *。该函数的用户可以使用运行时多态性来使用返回的对象。在这种情况下,函数如下所示。

Base* createObject(string objName)
{
if(objName == "D1")
return new D1;
else if(objName == "D2")
return new D2;
return NULL;
}

如果类不相似,则不能从单个基类继承它们,因为这不是正确的继承。在这种情况下,上述功能将无用。假设我有 3 个不同的类(class),如直升机、厨房和大学。在这种情况下,单个函数如何创建任何类型的对象?我有一种解决方案,如下所示。使用包装器类将所有不同的类指针包装在一个 Union 中。然后让函数创建 Wrapper 对象并根据传递给它的类名填充适当的类指针。该函数如下所示

Wrapper* createObject(string objType)
{
Wrapper *pWrapper = new Wrapper();
pWrapper->objectType = objType;
if(objType == "Helicopter")
{
pWrapper->pHelicopter = new Helicopter;
}
else if(objType == "Kitchen")
{
pWrapper->pKitchen = new Kitchen;
}
else if(objType == "College")
{
pWrapper->pCollege = new College();
}
return pWrapper;
}

包装类如下所示。

class Wrapper
{
public:
string objectType;
union
{
Helicopter *pHelicopter;
Kitchen *pKitchen;
College *pCollege;
};
};

有没有比上面更好的解决方案?

最佳答案

包装器的想法在我看来是行不通的。它让用户感到困惑,因为没有正确使用多态性。我会为每个逻辑组或具有相同基类的所有类使用一个创建函数。这可能会导致多个创建函数,但在这种情况下,您应该仔细考虑您的设计。另一种解决方法是定义一个“可创建”的抽象接口(interface)类,但我也不喜欢它。 ;-)

关于c++ - 如何编写一个函数来根据类名参数为不同的类创建不同的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3537072/

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