C++ 在c+;上创建自己的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; }

我习惯于在类中自己的对象上隐藏Java toString()方法,但我不确定以下代码哪里出了问题:

    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,因为代码>操作符+< /C> >没有被加载到int

最好的解决方案是使用字符串流:

#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;
}