C++ 在c+;上创建自己的toString()方法+;结构
我习惯于在类中自己的对象上隐藏Java toString()方法,但我不确定以下代码哪里出了问题:C++ 在c+;上创建自己的toString()方法+;结构,c++,C++,我习惯于在类中自己的对象上隐藏Java toString()方法,但我不确定以下代码哪里出了问题: struct Student { std::string name; int age; double finalGrade; std::string toString() { return "Name: " + name + "\n Age: " + age + "\n Final Grade: " + finalGrade; }
struct Student {
std::string name;
int age;
double finalGrade;
std::string toString() {
return "Name: " + name + "\n Age: " + age + "\n Final Grade: " + finalGrade;
}
};
<>我刚刚开始学习C++,所以任何建议都会被赏识:< p>你不能把int添加到STD::string,因为
#include <sstream>
std::string toString() {
std::ostringstream strout;
strout<< "Name: " << name << "\n Age: " << age << "\n Final Grade: " << finalGrade;
return strout.str();
}
#包括
std::string toString(){
标准:ostringstream strout;
strout您不能像添加Java字符串那样将任何您想要的内容添加到std::string
中。值得注意的是,大多数对象都不希望有toString
成员函数。但是,标准库提供了允许您将数值转换为std::string
。例如,您可以包装带有std::to_字符串的数值要修复函数:
#include <string>
struct Student {
std::string name;
int age;
double finalGrade;
std::string toString() {
return "Name: " +
name +
"\n Age: " +
std::to_string(age) +
"\n Final Grade: " +
std::to_string(finalGrade);
}
};
#包括
结构学生{
std::字符串名;
智力年龄;
双重财务伙伴;
std::string toString(){
return“Name:”+
名称+
“\n年龄:”+
std::to_字符串(年龄)+
“\n最终成绩:”+
std::to_字符串(最终版本);
}
};
编辑:虽然此答案解释了您尝试的方法不起作用的原因,但另一个答案的解决方案是首选方法。您不能只向std::string
添加int
或double
。请先使用它们进行转换。这应该可以正常工作:
std::string toString() {
return "Name: " + name + "\n Age: " + std::to_string(age) + "\n Final Grade: " + std::to_string(finalGrade);
}
与java相比,C++不提供一个预定义的“tostring”方法,每当请求对象的字符串表示时,它都隐式调用。因此,您的<代码> toString 方法必须被显式调用。
<>在C++中,通过重写<代码>操作符,可以使用类似的方法,不能将<代码> int >代码添加到<代码> STD::String 。相关:@ USE463035818仍然试图让自己熟悉什么是可行的,如何最好地做字符串插值和级联在C++中与java一样不起作用。如果你在这里尝试,你应该查一下代码> String Strue S.@ WelaNejava。当然,我的评论中没有任何一行,但是C++中的两个非常不同的语言。你可以使用<代码> STD::String < /Cord>,只需使用适当的重载。C++不使用<代码> toString ,C++使用<代码>埃拉托
struct Student {
std::string name;
int age;
double finalGrade;
std::string toString() const;
};
ostream& operator << (ostream &os, const Student &s) {
return (os << "Name: " << s.name << "\n Age: " << s.age << "\n Final Grade: " << s.finalGrade << std::endl);
}
std::string Student::toString() const {
stringstream ss;
ss << (*this);
return ss.str();
}
int main() {
Student stud { "john baker", 25, 1.2 };
std::cout << "stud directly: " << stud << endl;
std::string studStr = stud.toString();
std::cout << "stud toString:" << studStr << endl;
}