【发布时间】:2013-07-15 10:07:55
【问题描述】:
我有一个名为 Athlete 的父类,还有一个名为 TennisPlayer 的子类。我的父类中有两个属性,即姓名和年薪。还有一个 read 方法可以接收两个类的用户输入。这是我父母的样子:
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时,出了点问题,它不会接受用户输入,而是直接向我询问当前世界排名的输入。这是我的 TennisPlayer 类的 .cpp:
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;
}
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++ 中的继承。提前致谢。
【问题讨论】:
-
你的问题是混合
>>提取运算符和getline()。 -
cin >> get_annual_salary();除了任何其他问题之外,这是一个临时的float,它会立即被丢弃。所以这一切实际上就是忽略流中的某些内容(和/或可能在流上设置错误标志)。 -
getline(cin, get_name());真的可以编译吗?get_name()正在按值返回一个字符串,它是一个右值。 -
顺便说一句,它没有编译。我只是不知道如何在子类中获取父属性,所以我使用了访问器方法
-
在用户输入中读取可能更容易和更直接,然后使用您已经定义的 mutator 设置值。我不确定您为什么要使用访问器方法读取值
标签: c++ inheritance polymorphism