Следующий код не компилируется, но я не могу понять ошибку:тест Полиморфизма не работает
#include <iostream>
class FamilyMember {
int age;
public:
virtual int myage() = 0;
};
class Grandfather: public FamilyMember {
int age;
public:
Grandfather(): age(60) {
std::cout << "Im grandpa" << std::endl;
}
~Grandfather() {
std::cout << "Oh no! Grandpa is dead!" << std::endl;
}
virtual int myage() const {
return age;
}
};
class Father: public Grandfather {
int age;
public:
Father(): age(40) {
std::cout << "Im papa" << std::endl;
}
~Father() {
std::cout << "Papa is gone, noooooo!" << std::endl;
}
virtual int myage() const {
return age;
}
};
class Son: public Father {
int age;
public:
Son(): age(20) {
std::cout << "Im the kid" << std::endl;
}
~Son() {
std::cout << "Son is dead? He was so young!" << std::endl;
}
int myage() const {
return age;
}
};
int main() {
Grandfather G;
Father F;
Son S;
return 0;
}
Здесь находятся ошибки я получаю (я вырублен код до минимального количества, которое нарушает его, так номера строк не совпадают).
main.cc:535: error: cannot declare variable ‘G’ to be of abstract type ‘Grandfather’
main.cc:161: note: because the following virtual functions are pure within ‘Grandfather’:
main.cc:157: note: virtual int FamilyMember::myage()
main.cc:536: error: cannot declare variable ‘F’ to be of abstract type ‘Father’
main.cc:177: note: because the following virtual functions are pure within ‘Father’:
main.cc:157: note: virtual int FamilyMember::myage()
main.cc:537: error: cannot declare variable ‘S’ to be of abstract type ‘Son’
main.cc:193: note: because the following virtual functions are pure within ‘Son’:
main.cc:157: note: virtual int FamilyMember::myage()
make: *** [main.o] Error 1
Compilation failed.
Вы знаете о тот факт, что у Деда и Отца действительно есть два члена, называющих возраст?Один унаследован от FamilyMember и их собственный? – sellibitze
Итак, у меня тогда не было 'int age' на' FamilyMember'? Технически, из того, что вы сказали, «отец» должен иметь ** трех ** членов, называемых тогда возрастом. Один из своих, один из «Деда» и один из «Семейного члена», нет? –
Справа. То, что вы должны делать, зависит от того, чего вы пытаетесь достичь. Я не вижу смысла в этих отношениях наследования. У каждого члена семьи есть возраст, и это единственный атрибут, который у вас есть. Итак, зачем беспокоиться о создании этого отношения наследования? Не злоупотребляйте наследованием. – sellibitze