Я новичок в C ++ и столкнулся с интересной проблемой в некотором коде, с которым я работал в последнее время. Предположим, у нас есть следующие классы: Parent
, Child_A
, Child_B
и Child_C
:
class Parent {
...
virtual int Foo() = 0;
...
}
class Child_A : Parent {
...
int Foo() { return 1; }
...
}
class Child_B : Parent {
...
int Foo() { return 2; }
...
}
class Child_C : Parent {
...
int Foo() { return 3; }
...
}
Теперь я знаю, что произойдет, если я сделаю это:
std::unique_ptr<Child_A> a = std::make_unique<Child_A>();
Parent *p = &a;
p->Foo();
Это вернется 1. Но мой вопрос: что произойдет, если я сделаю это:
std::unique_ptr<Parent> p = std::make_unique<Parent>();
p->Foo();
Спасибо всем, кто может помочь!
Редактировать: Оказывается, мой вопрос не имеет никакого смысла, независимо от того, сколько раз я пытаюсь исправить свой синтаксис. Чистая виртуальная функция не может быть вызвана таким образом у родителя. Позже я узнал, что код, который я искал, установил родителя равным члену одного из его дочерних классов (с определенной виртуальной функцией), прежде чем он вызвал эту функцию ... Я только что пропустил его раньше.