024
15.11.2016, 12:14 Uhr
ao
(Operator)
|
Zitat von Joe1903: |
Ich versteh sowieso nicht,warum das schlecht geeignet ist zum Tracen..
|
Das sieht man eigentlich schon an deinem Anwendungsbeispiel, warum das schlecht geeignet ist:
C++: |
X x; const char*dataAsString = x; printf("x=%s\n",dataAsString); )
|
Hier wird eigens ein char-Pointer deklariert und zugewiesen um den Aufruf des Operators zu erzwingen. Will man hier mehrere Objekte tracen, muss man das für jedes einzelne Objekt machen - das gibt eine Orgie von Pointern.
Und, wenn man zu einem späteren Zeitpunkt dieselben Objekte nochmal tracen will (um Veränderungen zu erkennen), muss man alle Pointer neu zuweisen, weil nur das für die erneute Ausführung des Operators sorgt. Es ist dreckig, hinter einer Zuweisung die Ausführung einer Funktion zu verstecken.
Hätte man dagegen folgende Methode:
C++: |
std::string X::toString () const;
|
dann könnte man einfach diesen Einzeiler schreiben:
C++: |
std::cerr << .... << x.toString() << .... << std::endl;
|
Das könnte man wiederholen, so oft man will, hätte keinen Ärger mit dem Speicher, es wäre so einfach.
Eine andere Möglichkeit ist, den globalen Operator << zu überladen, so dass er X-Objekte streamen kann. Dann kann man direkt std::cerr << x; schreiben, ohne .toString(). Das sollte man euch zur Aufgabe geben, wenn ihr schon Operatoren überladen sollt. Dieser Post wurde am 15.11.2016 um 12:20 Uhr von ao editiert. |