При попытке вывести значение полей 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 - не понятно, его кода нет.