Я не уверен, что объясню хорошо, потому что мой английский плохой.
Я думаю, вы должны использовать его как ссылку или тип указателя.
потому что форма точно определена, что она должна делать.
Если вы используете свой код напрямую, ваш ребенок попытается скопировать и выполнить работу фигуры.
Вот почему не работает ваша функция переопределения.
использовать указатель или ссылку
как это.
pointer.h
class Parent {
public:
virtual void work() { printf("parent is working now\n"); }
};
class Child1 {
public:
virtual void work() { printf("child1 is working now\n"); }
};
class Child2 {
public:
virtual void work() { printf("child2 is working now\n"); }
};
struct Holder {
Parent* obj1;
Parent* obj2;
};
int main() {
Child1 child1;
Child2 child2;
Holder holder = { &child1, &child2 };
holder.obj1->work();
holder.obj2->work();
return 0;
}
reference.h
class Parent {
public:
virtual void work() { printf("parent is working now\n"); }
};
class Child1 {
public:
virtual void work() { printf("child1 is working now\n"); }
};
class Child2 {
public:
virtual void work() { printf("child2 is working now\n"); }
};
struct Holder {
Parent& obj1;
Parent& obj2;
};
int main() {
Child1 child1;
Child2 child2;
Holder holder = { child1, child2 };
holder.obj1.work();
holder.obj2.work();
return 0;
}
* ps: лично я использую абстрактную функцию (virtual void что-то () = 0;).
потому что я тоже иногда забывал об этом, поэтому я улавливаю это как синтаксическую ошибку.