这是我的c ++作业,我真的没有通过设置方法read()中的值来得到它们的含义。 问题:创建一个名为Athlete的基类,其中包含2个成员变量,用于所有职业运动员共有的属性:名称和年薪。它还应该包含纯虚方法read()。调用read()方法以从用户读取数据以设置属性的值。 这是我的头文件
#ifndef ATHLETE_H
#define ATHLETE_H
#include <string>
using namespace std;
class Athlete
{
public:
Athlete();
~Athlete();
void setName(string name);
string getName() const;
void setSalary(double salary);
double getSalary() const;
virtual void display() const;
virtual void read(string name, double salary) const;
private:
string name;
double salary;
};
#endif
我的cpp
#include "Athlete.h"
#include <iostream>
Athlete::Athlete() {}
Athlete::~Athlete() {}
string Athlete::getName() const { return this->name; }
void Athlete::setName(string name) {
this->name = name;
}
double Athlete::getSalary() const {
return this->salary;
}
void Athlete::setSalary(double salary) {
this->salary = salary;
}
void Athlete::read(string name, double salary) const {
Athlete* temp = new Athlete();
temp->setName(name);
temp->setSalary(salary);
}
void Athlete::display() const {
cout << "Name: " << this->getName() << endl;
cout << "Salary: " << this->getSalary() << endl;
}
我尝试在读取时使用setter方法,但这是一个错误。
答案 0 :(得分:1)
我认为你误解了这个问题。它说read()
方法应该读取用户的数据。通常它意味着从标准输入读取。之后,该方法应设置此特定运动员的属性值。意思是,输入的值与此特定对象相关。不是为了一些新的和暂时的。
将所有内容拉到一起可能如下所示:
void Athlete::read()
{
string name;
double salary;
std::cout << "Please enter the athlete name:";
std::cin >> name;
std::cout << "Please enter the athlete salary:";
std::cin >> salary;
setName(name);
setSalary(salary);
}
答案 1 :(得分:1)
你错过的是read
应该是纯虚拟功能。这意味着您不应该实际实现它,而应将其声明为:
virtual void read(string name, double salary) = 0;
这意味着Athlete
类实际上不能被实例化(它被称为absract类),而是将它用作基类,并且需要派生类来覆盖read
方法。如果它们不覆盖方法,它们本身就是抽象的,无法实例化。
一旦您将read
方法声明为纯虚拟,{<1}}方法作为Athlete
的方法实现, 它只需要作为派生类中的方法实现。
此外,由于派生类中的方法应该修改对象,因此该方法不能const
声明(如上所示)。