我不明白在read()方法中做什么

时间:2016-06-29 06:36:05

标签: c++

这是我的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方法,但这是一个错误。

2 个答案:

答案 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声明(如上所示)。