Kann ich drucken Sie ein Objekt von der Klasse mit printf()?
Ich habe einige code wie dieser:
class Point {
public:
int x,y;
Point() : x(1), y(1) {}
}
Kann ich drucken Objekt der Klasse mit printf()
:
int main()
{
Point point;
printf("%o",point);
return 0;
}
oder ich habe zu überlasten operator<<
und verwenden std::cout
:
std::ostream& operator<<(std::ostream& os, Point const& p)
{
os << p.x << "," << p.y;
return os;
}
int main()
{
Point point;
std::cout << point;
return 0;
}
- Entfernen Sie bitte die c - tag.
- Hier sind Sie richtig!
- Was passiert, wenn man versucht
printf
? - Die Kompilierung wurde abgebrochen, weil der Ausdruck
"%o"
ist nicht gültig. Als ich versuchte, eine gültige, wie"%d"
, es war ein Fehler erwartet argument des Typs int. - Es gibt also die Antwort auf Ihre Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht.
printf
ist nicht erweiterbar, in diesem Sinne.Ihre beste option ist, um eine überlastung
operator<<
zwischenstd::ostream
undPoint
.PS ich schlage vor, die änderung der argument-Typ
Point const&
.Sie können jedoch, verwenden Sie eine benutzerdefinierte
print
- Funktion in der Klasse, das wäre drucken Sie Ihr Objekt so, wie Sie wollen:Können Sie auch
fprintf
und eine benutzerdefinierte stream, wenn Sie möchten. Das ist nicht ganz die Antwort auf deine Frage, aber scheint sinnvoll zu sein, in der beschriebenen situation.std::cout
ist mehr "natürlich", denke ich.fprintf
statt. Update: uh.. oh... nicht mehr. Jetzt Sie leicht zu entmutigen, aber nicht mehr verbieten.Müssen Sie, um eine überlastung der Betreiber andernfalls den
printf()
wird verwirrt, was zum drucken des Objektspoint
wie die Klasse hat zwei Mitglieder.getter()
Funktion, die drucken können die Werte der Mitglieder.printf()
- Funktion für die Klasse?printf()
selbst sieht aus wie eine überlastung. Da in diesem können Sieprintf("%d", aDec)
undprintf("%f", aFloat)
. Das sieht viel wie das überladen von Funktionen , weil wir die gleichen Funktionsnamen, aber die Funktion ist das akzeptieren von unterschiedlichen parameter-Typen – das ist eine der Möglichkeiten, wir können überlast-Funktionen. Aber in dieser Klasse würde ich vorschlagen, Sie tun, überlastung <<printf()
ist C-Funktion. In standard-C können wir nicht überlasten, keine Funktion. Wir druckenint
undfloat
Variablen, weil in der Funktionprintf()
Liste der Argumente ist nicht angegeben. Aufgrund dieserprintf()
können drucken, einfache Typen(int, float, double, char, bool)), aber nicht Arten angegeben durch den Benutzer.