004
07.07.2007, 22:22 Uhr
~SuhaG
Gast
|
Nutzen kann ich ihn, er funktioniert auch, allerdings wird anscheinend die DERIVED-Klasse zunächst in die BASE-Klasse konvertiert ohne meinen Konstruktor zu nutzen, wodurch die Informationen aus der DERIVED-Klasse verloren geht. Hier mal der Quellcode in Kurzform:
Code: |
class URational { protected: unsigned long zaehler, nenner; public: // Konstruktor URational(unsigned long z = 0, unsigned long n = 1); // Konstruktor2 URational(const UMixed &um); // Operator + friend URational operator + (const URational &ur1, const URational &ur2); (...) };
class UMixed : public URational { protected: unsigned long intpart; public: UMixed(unsigned long ip = 0, unsigned long z = 0, unsigned long n = 1); UMixed(const URational &ur); UMixed(const UMixed &um); };
/******************/
URational::URational(const UMixed &um) { zaehler = (UMixed(um)).zaehler; nenner = (UMixed(um)).nenner; }
URational operator + (const URational &ur1, const URational &ur2) { URational res; unsigned long kgv, m1, m2, resggt; kgv = (ur1.nenner * ur2.nenner) / ggt(ur1.nenner, ur2.nenner); m1 = kgv / ur1.nenner; m2 = kgv / ur2.nenner; res.zaehler = (ur1.zaehler * m1) + (ur2.zaehler * m2); res.nenner = kgv; res.kuerzen();
return res; }
/*****************/
UMixed::UMixed(const URational &ur) :URational(ur) { if (zaehler > nenner) { unsigned long rest; rest = zaehler % nenner; intpart = (zaehler - rest) / nenner; zaehler = rest; } else intpart = 0; }
UMixed::UMixed(const UMixed &um) { zaehler = um.zaehler + (um.intpart * um.nenner); nenner = um.nenner; intpart = 0; }
|
Die explizite Konversion funktioniert... |