Naja. Warum verwende ich denn sowas wie
A *foo = new B;
und nicht einfach
A foo = new A
oder
B foo2 = new B
je nachdem, was ich haben will ?
thx
moe.
Hallo Moe,
weil du das nicht weisst oder nicht wissen willst. Klassisches Beispiel: ein generelles Graphisches Objekt, davon abgeleitet Kreis, Quadrat,… usw. Eine Seite Grafik ist eine Collection solcher Grafischer Objekte - muss sie neu gezeichnet werden, wird einfach die Paint-Methode aller Objekte aufgerufen, und dazu muss sie eben virtuell sein, sonst wird nämlich die Methode der Basisklasse aufgerufen (Weil der Compiler zur Compile Time ja nichts besseres weiss; virtuell wird dagegen erst zur Runtime bestimmt).
Natürlich könntest du das alles zu Fuss erledigen, z.B. indem du in jedes Objekt explizit hineinschreibst, ob es nun ein Kreis usw. ist, und das beim Paint abfragst, aber das könntest du ja mal vergessen oder falsch auswerten; und noch dazu müsstest du immer die gesamte Software überarbeiten, wenn ein neuer Typ wie Sechseck dazukommt - eine virtuelle Methode regelt das automatisch richtig. Dazu ist OO da, aber unbedingt gebraucht wird OO natürlich nicht, das hat schon Turing bewiesen ohne überhaupt was davon zu ahnen.
Gruss Reinhard