Nutzt mein Programm die O.O.P. oder nicht?
-
Hallo LukasBanana,
um hier noch mal konkret auf dein Beispiel einzugehen und nicht nur über die Definition von OOP zu diskutieren, ein paar Anmerkungen von mir.
So wie dein C++ Code jetzt aussieht, könnte man ihn auch relativ leicht in C umsetzen (Klasse als Struktur und die Methoden als einzelne Funktionen).
Wenn du dich näher mit C++ auseinandersetzt, wirst du erkennen, daß es noch mehr Möglichkeiten gibt, der OOP näherzukommen...
Wenn du das Window-System weiter ausbauen willst, wirst du sicherlich irgendwann zu dem Punkt kommen, wo du spezielle Windows erstellen willst.
Dafür bietet sich dann die Klassenableitung an, z.B.class SpecialWindow : public Window { }Nun möchte dieses Spezialfenster aber noch mehr zeichnen als ein Standard-Fenster, z.B. ein Hintergrundbild oder einen anderen Rahmen.
Dazu kannst du dann sogenannte virtuelle Methoden benutzen, d.h.
virtual void Draw();Nun kannst du die SpecialWindow::Draw Methode "überschreiben", z.B.
class SpecialWindow : public Window { public: virtual void Draw(); }; // in der Implementierungsdatei void SpecialWindow::Draw() { Window::Draw(); // erst Standard-Fenster zeichnen DrawBackgroundImage(); // nun Hintergrundbild zeichnen }Nun müßtest du deinen Vector nur noch so abändern, daß er Pointer statt Instanzen verwaltet, und schon kannst du beliebige Windows erstellen und zeichnen (nun benötigst du auch new und delete):
std::vector<Window *> vWindows; Window *window = new Window(); // hier z.B. weitere Attribute setzen vWindows.push_back(window); Window *special = new SpecialWindow(); vWindows.push_back(special); // nun alle Fenster zeichnen (lassen) for(std::vector<Window *>::iterator it = vWindows.begin(); it != vWindows.end(); ++it) { (*it)->Draw(); // da jetzt Zeiger auf Windows im vector gespeichert sind (man kann auch (**it).Draw() schreiben) } // jetzt noch die Windows aus dem vector löschen for(std::vector<Window *>::iterator it = vWindows.begin(); it != vWindows.end(); ++it) { delete *it; } vWindows.clear();Mit all den obigen C++ Techniken kannst du wunderbar objektorientiert programmieren.
Viel Spaß noch beim C++ lernen und programmieren...
-
Vielen Dank für deine Antwort "Th"!

Nur noch mal eine kurze Frage:
Was genau bewirkt das "virtual"? Ich bin in meinem Buch noch lange nicht durch und die Klassen Programmierkenntnisse habe ich von meinem Onkel aber eben noch nicht alles!Kann mir das jemand sagen, was "virtual" bewirkt?
-
Oh Mann, du kannst nur ein Troll sein...
-
Lies doch einfach in deinem Lehrbuch weiter. Warum sollen wir dir virtual erklären? Wenn wir etwas erklären, dann nur wenn jemand etwas nicht verstanden hat, trotz Lehrbuch. Vielleicht verstehst du es ja auch auf Anhieb, wenn du in deinem Buch soweit bist, und wir können uns ellen lange Erklärungen für jeden einzelnen Forumsuser ersparen.
-
Was hast du gegen Anfänger! Dafür ist doch auch das Forum da oder etwa nicht?
Wenn du, "finix" schon die Zeit findest einen Beitrag zu schreiben kannst du doch auch genau so gut einfach meine Frage beantworten, damit währe mir mehr geholfen!Sorry, aber solche Beiträge sind noch sinnloser als blöde Fragen!

(Es gibt keine blöden Fragen nur blöde Antworten)@finix: "Hast du nun eine Antwort oder nicht?"
-
Vielleicht ist virtual nicht mit einem Satz erklärt?
Weil da mehr zusammen hängt, worüber andere ganze Bücher schreiben.
-
Ist das mit dem "virtual" wirklich so umfangreich???

Oder kann mir jemand einen Link zu einer Erklärung mit "virtual" geben, wenn das nicht so schnell zu erklären ist?
-
-
LukasBanana schrieb:
Oder kann mir jemand einen Link zu einer Erklärung mit "virtual" geben, wenn das nicht so schnell zu erklären ist?
-
Danke "vista"!
