Class 内的 C++ 列表用于存储用户输入
C++ List within Class to store user input
自从我上次编写代码以来已经有一段时间了,但我正在努力重温我在学习中获得的一些技能。目前,我只是尝试实施我在网上看到的 statements/questions 的解决方案。
为此,我正在尝试构建一个过敏 class 来存储用户输入提供的信息(类别、名称、症状)。我一开始只是为每个参数输入字符串,但在现实世界中,人们可能有多种症状。为此,我想为症状创建一个列表参数而不是单个字符串。这是我的文件:
Allergy.hpp:
#ifndef Allergy_hpp
#define Allergy_hpp
#include <iostream>
#include <string>
#include <list>
using namespace std;
class Allergy {
public:
Allergy();
Allergy(string, string, list <string>);
~Allergy();
//getters
string getCategory() const;
string getName() const;
list <string> getSymptom() const;
private:
string newCategory;
string newName;
list <string> newSymptom;
};
#endif /* Allergy_hpp */
Allergy.cpp:
#include "Allergy.hpp"
Allergy::Allergy(string name, string category, list <string> symptom){
newName = name;
newCategory = category;
newSymptom = symptom;
}
Allergy::~Allergy(){
}
//getters
string Allergy::getName() const{
return newName;
}
string Allergy::getCategory() const{
return newCategory;
}
list Allergy::getSymptom() const{
return newSymptom;
}
main.cpp:
#include <iostream>
#include <string>
#include "Allergy.hpp"
using namespace std;
int main() {
string name;
string category;
string symptom;
cout << "Enter allergy name: ";
getline(cin, name);
cout << "Enter allergy category: ";
getline(cin, category);
cout << "Enter allergy symptom: ";
getline(cin, symptom);
Allergy Allergy_1(name, category, symptom);
cout << endl << "Allergy Name: " << Allergy_1.getName() << endl <<
"Allergy Category: " << Allergy_1.getCategory() << endl <<
"Allergy Symptom: " << Allergy_1.getSymptom() << endl;
return 0;
}
我还没有完成 main.cpp 中的实施。现在我一直在为 Allergy.cpp 中的列表创建一个 getter。非常感谢任何指导!!!
getter 实现的签名与 class 定义中的签名不匹配:
list Allergy::getSymptom() const{ // <=== oops!!
return newSymptom;
}
更正一下:
list<string> Allergy::getSymptom() const{ // <=== yes !!
return newSymptom;
}
编辑:
即使 getter 现在可以编译,您也不能像这样只显示症状列表:
cout << endl << "Allergy Name: " << Allergy_1.getName() << endl <<
"Allergy Category: " << Allergy_1.getCategory() << endl <<
"Allergy Symptom: " << Allergy_1.getSymptom() << endl;
要打印症状,请使用 range-for,这是遍历列表的一种简单方法:
for (auto& s : Allergy_1.getSymptom()) {
cout << s<<" ";
}
或使用带有 ostrea_iterator 的副本:
auto mylist=Allergy_1.getSymptom();
copy (mylist.begin(), mylist.end(), ostream_iterator<string>(cout," "));
自从我上次编写代码以来已经有一段时间了,但我正在努力重温我在学习中获得的一些技能。目前,我只是尝试实施我在网上看到的 statements/questions 的解决方案。
为此,我正在尝试构建一个过敏 class 来存储用户输入提供的信息(类别、名称、症状)。我一开始只是为每个参数输入字符串,但在现实世界中,人们可能有多种症状。为此,我想为症状创建一个列表参数而不是单个字符串。这是我的文件:
Allergy.hpp:
#ifndef Allergy_hpp
#define Allergy_hpp
#include <iostream>
#include <string>
#include <list>
using namespace std;
class Allergy {
public:
Allergy();
Allergy(string, string, list <string>);
~Allergy();
//getters
string getCategory() const;
string getName() const;
list <string> getSymptom() const;
private:
string newCategory;
string newName;
list <string> newSymptom;
};
#endif /* Allergy_hpp */
Allergy.cpp:
#include "Allergy.hpp"
Allergy::Allergy(string name, string category, list <string> symptom){
newName = name;
newCategory = category;
newSymptom = symptom;
}
Allergy::~Allergy(){
}
//getters
string Allergy::getName() const{
return newName;
}
string Allergy::getCategory() const{
return newCategory;
}
list Allergy::getSymptom() const{
return newSymptom;
}
main.cpp:
#include <iostream>
#include <string>
#include "Allergy.hpp"
using namespace std;
int main() {
string name;
string category;
string symptom;
cout << "Enter allergy name: ";
getline(cin, name);
cout << "Enter allergy category: ";
getline(cin, category);
cout << "Enter allergy symptom: ";
getline(cin, symptom);
Allergy Allergy_1(name, category, symptom);
cout << endl << "Allergy Name: " << Allergy_1.getName() << endl <<
"Allergy Category: " << Allergy_1.getCategory() << endl <<
"Allergy Symptom: " << Allergy_1.getSymptom() << endl;
return 0;
}
我还没有完成 main.cpp 中的实施。现在我一直在为 Allergy.cpp 中的列表创建一个 getter。非常感谢任何指导!!!
getter 实现的签名与 class 定义中的签名不匹配:
list Allergy::getSymptom() const{ // <=== oops!!
return newSymptom;
}
更正一下:
list<string> Allergy::getSymptom() const{ // <=== yes !!
return newSymptom;
}
编辑:
即使 getter 现在可以编译,您也不能像这样只显示症状列表:
cout << endl << "Allergy Name: " << Allergy_1.getName() << endl <<
"Allergy Category: " << Allergy_1.getCategory() << endl <<
"Allergy Symptom: " << Allergy_1.getSymptom() << endl;
要打印症状,请使用 range-for,这是遍历列表的一种简单方法:
for (auto& s : Allergy_1.getSymptom()) {
cout << s<<" ";
}
或使用带有 ostrea_iterator 的副本:
auto mylist=Allergy_1.getSymptom();
copy (mylist.begin(), mylist.end(), ostream_iterator<string>(cout," "));