Ik ben gewend om de Java toString()-methode op mijn eigen objecten in klassen te gebruiken, maar ik weet niet zeker waar ik de fout in ga met de volgende code:
struct Student {
std::string name;
int age;
double finalGrade;
std::string toString() {
return "Name: " + name + "\n Age: " + age + "\n Final Grade: " + finalGrade;
}
};
Ik begin pas c++ te leren, dus elk advies wordt op prijs gesteld
Antwoord 1, autoriteit 100%
Je kunt niets toevoegen aan een std::string
zoals je kunt aan een Java String
. Met name wordt van de meeste objecten niet verwacht dat ze een toString
-lidfunctie hebben. De standaardbibliotheek biedt echter std::to_string
waarmee u numerieke waarden kunt converteren naar een std::string
. U kunt bijvoorbeeld de numerieke waarden omwikkelen met een std::to_string
om uw functie te herstellen :
#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);
}
};
Bewerken: hoewel dit antwoord uitlegt waarom wat je hebt geprobeerd niet werkt, heeft de oplossing van het andere antwoord de voorkeur.
Antwoord 2, autoriteit 100%
In tegenstelling tot java biedt C++ geen vooraf gedefinieerde “toString”-methode die impliciet wordt aangeroepen wanneer een stringrepresentatie van een object wordt gevraagd. Dus je toString
-methode zal dan expliciet moeten worden aangeroepen.
In C++ is echter iets soortgelijks beschikbaar door de operator <<
voor streams te overschrijven. Daarbij kunt u de objectinhoud direct naar een stream “verzenden” (zonder dat u alles in een tussenliggend stringobject hoeft op te slaan). En u kunt dezelfde code ook gebruiken om een tekenreeks in te vullen die moet worden geretourneerd door een toString
methode:
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;
}
Antwoord 3, autoriteit 67%
Je kunt int niet toevoegen aan std::string omdat de std::string
operator+
niet overbelast was naar int.
De beste oplossing is om stringstream te gebruiken:
#include <sstream>
std::string toString() {
std::ostringstream strout;
strout<< "Name: " << name << "\n Age: " << age << "\n Final Grade: " << finalGrade;
return strout.str();
}
Antwoord 4, autoriteit 22%
Je kunt niet zomaar een int
of een double
toevoegen aan een std::string
. Gebruik std::to_stringom ze eerst te converteren. Dit zou goed moeten werken:
std::string toString() {
return "Name: " + name + "\n Age: " + std::to_string(age) + "\n Final Grade: " + std::to_string(finalGrade);
}