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

I dont understand what to do in the read() method

本文关键字:方法 什么 明白 read      更新时间:2023-10-16

这是我的c++作业,我并没有真正理解它们在方法read()中设置值的含义。问题:创建一个名为Athlete的基类,其中包含两个成员变量,用于所有职业运动员的共同属性:姓名和年薪。它还应该包含纯虚拟方法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

And my 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;
}

我尝试在read中使用setter方法,但是有一个错误。

我想你误解了这个问题。它说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);
}

您错过的事情是read应该是纯虚拟函数。这意味着您不应该实际实现它,而应该将其声明为:

virtual void read(string name, double salary) = 0;

这意味着Athlete类实际上不能被实例化(它被称为抽象类),相反,它将被用作基类,派生类将被要求覆盖read方法。如果它们不重写方法,它们本身就是抽象的,不能被实例化。

你是需要实现read方法作为Athlete的方法一旦你声明它为纯虚的。它只需要在派生类中作为一个方法来实现。

由于派生类中的方法应该修改对象,因此该方法不能被const声明(如上所示)。

相关文章: