我不明白在read()方法中该做什么 这是我的C++作业,我不真正理解它们在方法Read()中设置值的意思。 问题:创建一个名为“运动员”的基类,该基类包含所有职业运动员共有的属性的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 \ifndef运动员 #定义运动员 #包括 使用名称空间std; 职业运动员 { 公众: 运动员(); ~运动员(); void setName(字符串名); 字符串getName()常量; 无效固定工资(双倍工资); 双getSalary()常量; 虚空显示()常量; 虚拟无效读取(字符串名称,双倍工资)常量; 私人: 字符串名; 双薪; }; #恩迪夫

我不明白在read()方法中该做什么 这是我的C++作业,我不真正理解它们在方法Read()中设置值的意思。 问题:创建一个名为“运动员”的基类,该基类包含所有职业运动员共有的属性的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 \ifndef运动员 #定义运动员 #包括 使用名称空间std; 职业运动员 { 公众: 运动员(); ~运动员(); void setName(字符串名); 字符串getName()常量; 无效固定工资(双倍工资); 双getSalary()常量; 虚空显示()常量; 虚拟无效读取(字符串名称,双倍工资)常量; 私人: 字符串名; 双薪; }; #恩迪夫,c++,C++,还有我的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::getSalar

还有我的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;
}
#包括“运动员.h”
#包括
运动员::运动员(){}
运动员::~运动员(){}
字符串运动员::getName()常量{返回此->名称;}
无效运动员::设置名称(字符串名称){
此->名称=名称;
}
双运动员::getSalary()常量{
返回此->工资;
}
无效运动员::固定工资(双倍工资){
这个->薪水=薪水;
}
无效运动员::读取(字符串名称,双倍工资)常量{
运动员*临时=新运动员();
临时->设置名称(名称);
临时->固定工资(工资);
}
无效运动员::显示()常量{

我想你误读了这个问题。它说,
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);
}
void运动员::read()
{
字符串名;
双薪;
std::cout>name;
标准::cout>工资;
集合名(名称);
固定工资;
}

我想你误读了这个问题。它说
读()
方法应该从用户那里读取数据。通常它意味着从标准输入中读取。之后,该方法应该为这个特定的运动员设置属性值。这意味着,输入的值与这个特定的对象相关。而不是新的和临时的

将所有内容放在一起可能如下所示:

 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);
}
void运动员::read()
{
字符串名;
双薪;
std::cout>name;
标准::cout>工资;
集合名(名称);
固定工资;
}

您错过的是
read
应该是一个纯虚拟的功能。这意味着您不应该实际实现它,而应该声明为:

virtual void read(string name, double salary) = 0;
这意味着
atternate
类实际上不能被实例化(称为absract类),相反,它将被用作基类,派生类将被要求重写
read
方法。如果它们不重写该方法,它们本身将是抽象的,无法被实例化

一旦您将
read
方法声明为纯虚拟,则不需要将
read
方法作为
atternate
的方法来实现。它只需要作为派生类中的方法来实现


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

您错过的是,
read
应该是一个纯虚拟的功能。这意味着您不应该实际实现它,而应该声明为:

virtual void read(string name, double salary) = 0;
这意味着
atternate
类实际上不能被实例化(称为absract类),相反,它将被用作基类,派生类将被要求重写
read
方法。如果它们不重写该方法,它们本身将是抽象的,无法被实例化

一旦您将
read
方法声明为纯虚拟,则不需要将
read
方法作为
atternate
的方法来实现。它只需要作为派生类中的方法来实现


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

名称
read
非常混乱。为什么要在
read
方法中设置任何内容?无论如何,根据您的描述,您所要做的就是
setName(名称);setalary(薪水);
在其内部(不要创建新对象)。如果您编写纯虚函数,则不实现它,只需
虚空读取(字符串名称,双倍薪水)=0
,派生这个类的另一个类应该实现这个函数。@奇怪,但当我把这两行放进去时,编译器说它不是compatible@stevenTan这是因为您已经将
read
方法标记为
const
。如果它应该修改对象,那么它就不能是
const
@Melebius,其中标准是说你不能实现它吗?请看:名称
read
非常混乱。你为什么要在
read
方法中设置任何东西?无论如何,根据你的描述,你所要做的就是
setName(name);setSalary(salary);
在其中(不要创建新对象).如果您编写的是纯虚拟函数,则不会实现它,只需
virtualvoid读取(字符串名,双倍工资)=0
,派生这个类的另一个类应该实现这个函数。@奇怪,但当我把这两行放进去时,编译器说它不是compatible@stevenTan这是因为您已经将
read
方法标记为
const
。如果它应该修改对象,那么它就不能是
const
@Melebius,其中标准是说你不能实现它吗?请看:在我的派生类中,让我们说t