Я начинающий с c ++ :), я упростил свою задачу до этого:
У меня есть класс Person
class Person{
string name;}
И еще один класс Student, который наследует Person
class Student : public Person{
string schoolName;}
И затем у меня есть библиотека классов, которая должна иметь различный компилятор в зависимости от ввода
class Library{
void checkBeforeEntry(Person* p){
cout << "You must be a student to enter" << endl;}
void checkBeforeEntry(Student* s){
cout << "You can enter" << endl;}}
В какой-то момент в моей программе я храню такого человека: Person* guy;
потому что в этот момент я еще не знаю, простой ли он человек или ученик.
Но из-за этого я «теряю» информацию о реальном типе объекта, и я попробовал это :
Person *p = new Person();
Student *s = new Student();
Person *g = new Student();
lib.checkBeforeEntry(p);
lib.checkBeforeEntry(s);
lib.checkBeforeEntry(g);
Вывод был:
You must be a student to enter
You can enter
You must be a student to enter
Но я хочу, чтобы последнее утверждение было «вы можете ввести». Я использовал немного полиморфизма прежде, чтобы адаптировать компиляцию производного класса, но здесь я пытаюсь изменить компиляцию стороннего класса (библиотеки), чтобы ситуация была не такой, как я привык. Вы знаете, как решить эту проблему или мне следует использовать другой дизайн?