我在显示我的子类中的一些字符串时遇到问题。我正在尝试使用函数,但我不确定为什么我没有得到这些字符串的内容。
class Employee{
string FN, LN, JT;
double Income;
public:
char const *getters(){
return FN.data(), LN.data(), JT.data(); //=========>getting the content of strings
}
virtual char const *getAccess()=0;
Employee(char const *fn, char const *ln, char const *jt, double inc){
if(fn==0) throw Exception(1, "Sorry, First Name is Null");
if(ln==0) throw Exception(2, "Sorry, Last Name is Null");
if(jt==0) throw Exception(3, "Sorry Job Title is Null");
if(inc<=0) throw Exception(4, "Sorry, The Income is Null");
FN=fn;
LN=ln;
JT=jt;
Income=inc;
}
};
class Programmer: public Employee{
public:
Programmer(char const *fn, char const *ln, double inc):
Employee(fn,ln,"Programmer", inc)
{}
char const *getAccess(){
return "You have access to Meeting Room + Development Office";
}
};
//=========The Main============
int main(){
Employee *acc[3];
try{
acc[0]=new Programmer("Juan", "Villalobos", 60000);
acc[1]=new Director("Jorge", "Villabuena", 70000);
acc[2]=new ProdSupport("Pedro", "Villasmil", 80000);
for(int i=0; i<3; i++){
cout << acc[i]->getters() << endl; //=============>Displaying the strings
cout << acc[i]->getAccess() << endl;
}
} catch(Exception acc){
cout << "Err:" << acc.getErrCode() << " Mess:" << acc.getErrMess() << endl;
}
return 0;
}
所以,我猜我的功能没有做我想要的,显示名字和姓氏。 我做错了什么?
答案 0 :(得分:1)
,
逗号运算符的结果是右手值,因此return FN.data(), LN.data(), JT.data();
实际上与return JT.data();
相同,这就是您所看到的。
要做你正在尝试的事情,请尝试这样做:
std::vector<std::string> getValues() const {
std::vector<std::string> arr(3);
arr.push_back(FN);
arr.push_back(LN);
arr.push_back(JT);
return arr;
}
std::vector<std::string> arr = acc[i]->getValues();
for (std::vector<std::string>::const_iterator iter = arr.begin(), end = arr.end(); iter != end; ++iter) {
cout << *iter << " ";
}
cout << endl;
或者,将cout
逻辑移入类本身:
void displayValues() const {
cout << FN << " " << LN << " " << JT << endl;
cout << getAccess() << endl;
}
for(int i=0; i<3; i++){
acc[i]->displayValues();
}
答案 1 :(得分:1)
我不认为混合char*
和string
。比较晚。
这会编译
char const *getters(){
return FN.data(), LN.data(), JT.data();
}
但你可能想要的是
char const *getters(){
return (FN + LN + JT).data();
}
我会像这样重写您的程序:
class Employee{
string FN, LN, JT;
double Income;
public:
string getters(){
return FN + " " + LN + " " + JT;
}
virtual string getAccess()=0;
Employee(string const &fn, string const &ln, string const &jt, double inc) :
FN(fn), LN(ln), JT(jt), Income(inc)
{
}
};
class Programmer: public Employee{
public:
Programmer(string const &fn, string const &ln, double inc):
Employee(fn,ln,"Programmer", inc)
{}
string getAccess(){
return "You have access to Meeting Room + Development Office";
}
};
//=========The Main============
int main()
{
std::vector<Employee> acc;
acc.push_back(Programmer("Juan", "Villalobos", 60000));
acc.push_back(Director("Jorge", "Villabuena", 70000));
acc.push_back(ProdSupport("Pedro", "Villasmil", 80000));
for(size_t i=0; i<acc.size(); i++){
cout << acc[i].getters() << endl;
cout << acc[i].getAccess() << endl;
}
return 0;
}