Я хочу использовать конструктор дочернего класса, когда родительский объект был передан функции.C++ полиморфизм использует дочерний конструктор
class foo {
public:
virtual void doThing() { };
};
class bar : public foo {
public:
void doThing() override;
};
class bar2 : public foo {
public:
void doThing() override;
};
int main() {
bar obj;
bar2 obj2;
someFunction(&obj);
someFunction(&obj2);
}
void someFunction(foo *obj) {
//child object construction
}
Если bar
указатель на объект класса был передан в someFunction()
то было бы создать новый bar
объект внутри функции. То же самое с классом bar2
и так далее.
Мой вопрос: существует ли способ создать дочерний объект, когда была указана ссылка на объект?
http://katyscode.wordpress.com/2013/08/22/c-polymorphic-cloning-and-the-crtp-curiously-recurring-template-pattern/ – IdeaHat
, или если вы не хотите полностью использовать CRTP, вы предоставляете чистый виртуальный метод «клонировать» в foo, а затем определяете его в членах. Но у вас есть другие проблемы с вашим кодом. doThing всегда должен быть виртуальным, ваш базовый класс должен, вероятно, быть чистым виртуальным, ect. – IdeaHat
@OliverCharlesworth, клонированный рисунок много показывает в разработке программного обеспечения. Его полезно все время ... это действительно единственный способ сказать, сделать копию коллекции полиморфных объектов. – IdeaHat