Hi Der!
Ich würde von C aus gesehen für einzelne Teilaufgaben eher in Richtung Assembler als in Richtung C++ gehen wollen.
Du sprichst mir aus der Seele. Ich verstehe oftmals nicht, warum ich für einfache Aufgaben, den Code unnötig aufschwämmen und schwerverständlich gestalten soll. Meistens wird das dann mit dem Übungsaspekt begründet.
Aber ich mag es nicht, wenn sich der Programmcode durch die Verwendung von möglicherweise eleganten, aber für den konkreten Fall auch oft ineffizienten Klassenhierarchien aufbläht.
Im Fall von Klassenhierarchien bin ich gerade am Anfang bzw. in der Mitte des Verstehens. Aber der Ansatz der Objektorientierung in dieser Hinsicht gefällt mir besonders gut. Allderdings nur unter dem Gesichtspunkt, dass man sich entsprechende Hierarchien selbst erarbeitet. Sonst würde mir da der Reiz fehlen.
[...] das Überladen des =-Operators.
Oops, auf die Idee bin ich noch nicht gekommen. Hat der im Hinblick auf das Überladen und Neudefinieren eine Sonderstellung, oder warum stellt das eine besondere Herausforderung dar?
Ich behandle gerade den Zuweisungsoperator im Bezug auf Klassen.
Ein kleines Beispiel:
#include <iostream>
class Klasse {
int wert1, wert2;
public:
//Konstruktor
Klasse(int w1, int w2) {
wert1 = w1;
wert2 = w2;
}
//Methoden
void ausgeben() {
cout << "Wert1 = " << wert1 << endl;
cout << "Wert2 = " << wert2 << endl;
}
int main() {
Klasse Objekt1 = Klasse(5,3);
Objekt1.ausgeben(); //Ausgabe Wert1 = 5, Wert2 = 3
Klasse Objekt2 = Klasse(1,2);
//Zuweisungsoperator
Objekt2 = Objekt1;
Objekt2.ausgeben(); //Ausgabe Wert1 = 5, Wert2 = 3
}
Es wird also ein Objekt1 unter Nutzung eines selbstdefinierten Konstruktor erzeugt. Nachdem das zweite Objekt erzeugt wurde, werden ihm unter Nutzung des Zuweisungsoperators die Werte von Objekt1 übergeben.
Nun besteht die Möglichkeit, den Zuweisungsoperator der Klasse zu überschreiben.
Diesen könnte man also wie folgt überladen. Das Ganze könnte dem Zweck dienen, um im Zuge einer Zuweisung eines Objekts an ein anderes weitere Methoden oder Befehle ausführen zu lassen.
class Klasse {
[...] //siehe oben :)
//Überladung des Zuweisungsoperators
Klasse& Klasse::operator=(const Klasse& op) {
wert1 = op.wert1;
wert2 = op.wert2;
return *this;
//Ausführung weiterer Methoden oder Befehle möglich...
}
Jetzt haben wir den Zuweisungsoperator überladen. In diesem Beispiel sinnfrei, aber mir geht es ja auch nur um das theoretische Verständnis. Und allein die Möglichkeit der Überladung fasziniert mich.
Ich hoffe, ich habe das richtig erklärt, da ich selber noch im Prozess des Verstehens bin.
MfG Hopsel
"It's amazing I won. I was running against peace, prosperity, and incumbency."
George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)