C++是否可以创建依赖于单个构造函数参数的派生类而不是bass类
C++ can I create derived instead of bass class dependent on arguments given to single constructor?
如果我有一个带有派生类的基类,是否可以根据传递到单个构造函数的参数将实例创建为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
如上所示,当创建该类的实例时,我希望构造函数正常运行并生成该类,或者(取决于作为参数给定的值)将其作为派生SubClass的实例。请注意,它必须基于不同参数的值,而不仅仅是它们的类型。有可能做到这一点吗?如果有必要,只要只需要使用一个构造函数,就可以使用另一个派生类来表示"normal"选项(而不是使用纯bass类)。
如果这不可能,当我想要一个SubClass构造函数的实例时,我可以直接调用它,但这并不理想,因为每次创建它时,我都必须检查应该创建哪个,而不是在构造函数中只进行一次内部检查。
您可以将创建委托给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
您需要使用一个结构。它将根据您的params返回一个指向父类的指针。您将通过父类的接口来使用它。看见https://en.wikipedia.org/wiki/Abstract_factory_pattern和https://en.wikipedia.org/wiki/Factory_method_pattern
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 在派生函数中指定void*参数
- 如何通过派生类函数更改基类中的向量
- 如何委托派生类使用其父构造函数?
- 如何使用单独文件中的派生类访问友元函数对象
- 派生类销毁的最佳实践是什么
- 如何使用基类指针引用派生类成员
- 派生类是否可以在抽象工厂设计模式中具有数据成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何引用基类的派生类?
- 存储模板类型以强制转换回派生<T>
- 需要从 istream 和 ostream 派生 iostream
- 在 C++ 中用派生类型重写成员函数
- 具有多个类、派生类的C++正向声明
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 如果基类包含双指针成员,则派生类的构造函数
- 为什么此派生对象无法访问基类的后递减方法?
- C++是否可以创建依赖于单个构造函数参数的派生类而不是bass类