我不明白在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()常量; 虚空显示()常量; 虚拟无效读取(字符串名称,双倍工资)常量; 私人: 字符串名; 双薪; }; #恩迪夫
还有我的cpp我不明白在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
#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