gpt4 book ai didi

C++ 我可以根据给单个构造函数的参数创建派生类而不是 bass 类吗?

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

如果我有一个带有派生类的基类,是否可以根据传入单个构造函数的参数将实例创建为 bass 类或派生类?

示例代码:

//Base Class
class MyClass {
public:
//All instances created with this constructor
MyClass(int param1, int param2) {
if (param1 > param2) { //(for example)
// TODO - create this object as SubClass instead
} else {
//normal base class construction
}
}
}

//Derived Class
class SubClass {
public:
SubClass(int param1, int param2) {
//Subclass construction
}

void function() {
//function that only works on subclass objects
}
}

MyClass object1(1, 2); //should create MyClass object
MyClass object2(2, 1); //should create SubClass object

如上所示,当创建此类的实例时,我希望构造函数正常运行并创建类,或者(取决于作为参数给出的值)将其作为派生子类的实例。请注意,它必须基于不同参数的值,而不仅仅是它们的类型。是否有可能做到这一点?如有必要,可以使用另一个派生类来表示“正常”选项(而不是使用纯 bass 类),只要只使用一个构造函数即可。

如果这不可能,我可以在我想要这个实例时调用 SubClass 构造函数,但这并不理想,因为我每次都必须检查应该创建哪个被创建,而不仅仅是在构造函数中进行单个内部检查。

最佳答案

您可以将创建委托(delegate)给 MyClass 的静态函数:

class SubClass;

//Base Class
class MyClass {
MyClass(int param1, int param2) {
}
public:
static unique_ptr<MyClass> Create(int param1, int param2) {
if (param1 > param2) { //(for example)
return std::make_unique<SubClass>(param,param2);
} else {
return std::make_unique<MyClass>(param,param2);
}
}
}

//Derived Class
class SubClass : public MyClass {
SubClass(int param1, int param2) {
//Subclass construction
}
public:

void function() {
//function that only works on subclass objects
}
}

std::unique_ptr<MyClass> object1 = MyClass::Create(1, 2); //should create MyClass object
std::unique_ptr<MyClass> object1 = MyClass::Create(2, 1); //should create SubClass object

关于C++ 我可以根据给单个构造函数的参数创建派生类而不是 bass 类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46746184/

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