【发布时间】:2020-05-19 01:59:32
【问题描述】:
假设我有一个 Human 类:
class Human {
public:
bool isFemale;
double height;
Human(bool isFemale, double height) {
this->isFemale = isFemale;
this->height = height;
}
};
以及实现自己的方法的派生类,例如女性和男性。在 C++11 中,我是否有办法在运行时根据 Human 构造函数的输入来确定 Human 应该是哪个“子类型”(男性或女性)? 我在各自的班级中为男性和女性设置了不同的行为。我要做的是在运行时确定 Human 是女性类型还是男性类型,具体取决于构造函数输入,因此我可以(之后)根据其类型应用适当的行为。 理想的情况是始终调用 Human 构造函数,并在运行时选择适当的子类型,具体取决于在构造函数中输入的参数。如果可能的话,我想应该扭曲“人类”构造函数,但我不确定如何......
【问题讨论】:
-
您已经在运行时分配了
isFemale。 -
我将此属性分配给 Human;现在我想知道基于此属性的对象类型是否可以是“女性”(即根据基于构造函数参数的调度对象类型)。之后的目标是根据适当的子类型调用 Human 上的所有适当方法,而不必使用 (if (isFemale...)... if(!isFemale...))。 (添加到帖子中)
-
您在寻找工厂设计模式吗?
-
你为什么要这样做?如果你想要男性和女性的不同行为,你应该把它放在各自的类中。
-
Human的构造函数只能创建一个Human(即使是某个派生类的Human子对象)。您正在寻找的可能是工厂功能。
标签: c++ oop c++11 design-patterns factory