Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Code lesen/Polymorhismus

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
20.02.2019, 23:02 Uhr
bagration



#include <iostream>
using namespace std;
class X {
protected:
static int n;
int no;
public:
X(): no{n++} {cout << no;}
virtual ostream& print (ostream& o) const {return o << ':' << no;}
void f(X x) const {
this->print(cout);
x.print(cout);//Warum wird von hier print::X aufgerufen obwohl das x eine Kopie eines Objekts der Klasse Y ist? Anscheinend verstehe ich etwas nicht am Polymorhismus.
}
};
int X::n{3};

class Y : public X {
public:
ostream& print(ostream& o) const {X::print(o); return o << no+9;}
};

int main()
{
Y a, b;
X *c{&b};
c->f(a);
return 0;
}
Erwartet:
34:413:3

Dieser Post wurde am 20.02.2019 um 23:06 Uhr von bagration editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
21.02.2019, 11:28 Uhr
ao

(Operator)



Zitat:
Warum wird von hier print::X aufgerufen obwohl das x eine Kopie eines Objekts der Klasse Y ist?

x ist keine *vollständige* Kopie von einem Y. x ist ein X, kein Y, enthält also nur den Basisklassen-Anteil von dem Y-Objekt. Die Y-spezifischen Informationen werden nicht mitkopiert.

Willst du print polymorph verwenden, dann übergib an f keine Kopie, sondern eine Referenz oder einen Pointer.

Dieser Post wurde am 21.02.2019 um 11:31 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
21.02.2019, 11:40 Uhr
bagration



Vielen Dank!
Haette ich unbedingt selbst merken muessen dass f ein Objekt vom Typ X aufnimmt.
 
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: