У меня есть родительский класс Athlete, и есть дочерний класс TennisPlayer. В моем родительском классе есть два атрибута: имя и годовая зарплата. Существует также метод чтения, который вводит пользовательский ввод для обоих классов. Вот как выглядит мой родитель:Наследование в C++ (родительский и дочерний класс)
class Athlete
{
public:
Athlete();
Athlete(string name, float annual_salary);
virtual void read();
virtual void display();
string get_name() const;
float get_annual_salary();
void set_name(string name);
void set_annual_salary(float annual_salary);
private:
string name;
float annual_salary;
};
class TennisPlayer : public Athlete
{
public:
TennisPlayer();
TennisPlayer(string name, float annual_salary, int current_world_ranking);
int get_current_world_ranking();
void set_current_world_ranking(int current_world_ranking);
virtual void read();
virtual void display();
private:
int current_world_ranking;
};
Метод read() для класса спортсменов отлично работает. Но когда дело доходит до TennisPlayer, который является дочерним классом, что-то пошло не так, это не займет ввода пользователя, вместо этого он сразу попросит меня ввести текущий мировой рейтинг. Вот мой .cpp для класса TennisPlayer:
void TennisPlayer::read()
{
cout << "Enter name for tennis player: " ;
getline(cin, get_name());
cout << "Enter annual salary for tennis player: ";
cin >> get_annual_salary();
cout << "Enter current world ranking: ";
cin >> current_world_ranking;
}
Conctructor для класса tennisPlayer:
TennisPlayer::TennisPlayer(string name, float annual_salary ,int current_world_ranking)
: Athlete(name , annual_salary)
{
this->current_world_ranking = current_world_ranking;
}
Также есть проблема при чтении годовой заработной платы за tennisPlayer. Я не очень хорошо знаком с наследованием на C++. Заранее спасибо.
Смешивание '' '' '' '' '' проблемы '' '' '' '' '' '' '' '' '' '' '' '. – greatwolf
'cin >> get_annual_salary();' Помимо любых других проблем, это gong, чтобы читать временный 'float', который немедленно отбрасывается. Таким образом, все это действительно игнорирует что-то в потоке (и/или возможно устанавливает флаг ошибки в потоке). – BoBTFish
Имеет ли 'getline (cin, get_name())' 'собственно компилировать? 'get_name()' возвращает строку по значению, которая является rvalue. – greatwolf