При попытке вывести значение полей child классов изнутри родительского класса выводится значение полей класса родителя

Класс родитель:

class Student{
    protected:
    void debt(Student *stud){
        cout<<stud->name;
        printf(" have to pay xxx dollars \n");
    }
    void retake(Student *stud){
        if(stud->retakeCount<=3){
    printf("retake date 5 days after the failed exam");
        }else{
            printf("expelled");
        }
    }
    
  public:
  string name = "default";
  int retakeCount = 0;
  virtual void grants(){
      cout<<"yes";
  };
};

child класс:

class FStud: public Student{
    public:
    string name;
    FStud(string name){
        this->name=name;
    }
    void grants(){
        debt(this);
    }
};

Проблема заключается в том что когда я пытаюсь вывести имя студента который я передал в конструктор выводится значение из класса родителя default.

Student* fStud = new FStud("Albert");
    Student* cStud = new CStud("Newton", 9);
    fStud->grants();
    cStud->grants();

Вот что выводится:

default have to pay xxx dollars

retake date 5 days after the failed exam

Хочу чтобы выводилась: Albert have to pay xxx dollars

expelled


Ответы (1 шт):

Автор решения: KoVadim

В классе FStud удалите переменную string name; и первая половинка заработает. Что с классом CStud - не понятно, его кода нет.

→ Ссылка