在 c struct 上制作我自己的 toString() 方法

新手上路,请多包涵

我习惯于在类中自己的对象上覆盖 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++,所以任何建议都将不胜感激

原文由 whelanevan6 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
1 个回答

与 java 相比,C++ 不提供预定义的“toString”方法,只要请求对象的字符串表示,就会隐式调用该方法。所以你的 toString 方法必须被显式调用。

然而,在 C++ 中,通过覆盖流的 operator << 可以获得类似的东西。因此,您可以直接将对象内容“发送”到流中(无需将所有内容存储在中间字符串对象中)。您也可以使用相同的代码来填充要由 toString 方法返回的字符串:

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

原文由 Stephan Lechner 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题