Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » vererbung, dyn.bindung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
08.07.2003, 21:02 Uhr
~andrea
Gast


eine Basisklasse Object sowie

C++:
class A: public Object {
...
};
class B: public Object {
  public:
    void m(Object *o);
    void m(A *a);
};

int main() {
  B b;
  Object *o;
  A *a= new A();
  o= a;
  b.m(o);

  return 0;
}


Wie kann die methode mit A *a aufgerufen werden, ohne dass ein typecast auf A* durchgeführt wird, aufgerufen werden??
bzw. geht das überhaupt?

danke andrea

Edit by virtual: Bitte Code Tags verwenden

Dieser Post wurde am 08.07.2003 um 21:23 Uhr von virtual editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.07.2003, 21:32 Uhr
virtual
Sexiest Bit alive
(Operator)


Ohne cast geht das nicht. Ein typecast, wie Du in von C aus kennst, ist übrigens dabei sehr unsicher. Dh das hier bitte nicht machen:

C++:
B b;
Object *o;
A *a= new A();
o= a;
b.m((A*)o);


Zwar ist in diesem überschaubaren Beispiel alles noch nachvollziehbar, aber sobalds unfangreicher wird, kann man den Überblick verlieren. Länger, aber dafür sicherer ist:

C++:
B b;
Object *o;
A *a= new A();
o= a;
b.m(dynamic_cast<A*>(o));


(wobei das nur tut, wenn Object virtuelle Methoden Tabelle hat). Der Vorteil vom Dynamic Cast ist, daß automatisch gechekt wird, ob das Objekt sich überhaupt casten läßt.

Tja, erwähnte ich schon, daß man in Situationen wie von Dir angestrebt meistens sein Design überdenken sollte?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.07.2003, 21:39 Uhr
~andrea
Gast


danke für die antwort!

das design is nicht von mir, das is sozusagen eine prüfungsfrage gewesen
und ich hab überlegt und nicht gewusst, ob das nun irgendwie funktionieren könnte ohne cast oder sonstigen aktionen!?
vielleicht irgendwie mit abstrakter klasse und virtual vor den methoden, aber ich komm auf keine lösung.

also is es anscheinend nicht realisierbar!
außer dir fällt noch was ein *g*

danke, lg andrea
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.07.2003, 21:50 Uhr
virtual
Sexiest Bit alive
(Operator)


Ich meine, das naheliegende wäre halt

C++:
b.m(a);


Dann wird die Korrekt Method aufgerufen. Aber sobald to o verwendest, also die Basisklasse, wir die falsche version aufgerufen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: