this oder type::
-
Oh ich hab jetzt herausgefunden, dass man sowas machen kann:
class base { public: int a; }; class erbe: public base { public: int a; int foo() { int a; a=1; erbe::a=2; base::a=3; } };also früher dachte ich - man sollte this->a nehmen - aber mit klassennamen geht es auch direkt. Hm... Der Code ist doch richtig? Zumindest frisst das GCC.
Jetzt meine Frage. So wie es jetzt ist, scheint es mir sauberer zu sein als mit this. Wofür dann this? this wäre universeller - denke ich.
OK - jetzt habe ich ein Problemchen gefunden:
void test(erbe *e)
{
}mit this könnte ich einen pointer übergeben. mit test(erbe) klappt es hingegen nicht. Wie kann ich es ohne this lösen?
Und die wichtigste Frage. Was kann ich tun um base-pointer an eine funktion zu übergeben - wenn this geht, dann müsste doch was geben um basis-objekt an funktion zu übergeben?
-
TheShadow2000 schrieb:
mit this könnte ich einen pointer übergeben. mit test(erbe) klappt es hingegen nicht. Wie kann ich es ohne this lösen?
Ganz ohne Verwendung von this imho garnicht.
Und die wichtigste Frage. Was kann ich tun um base-pointer an eine funktion zu übergeben - wenn this geht, dann müsste doch was geben um basis-objekt an funktion zu übergeben?
Dazu brauchst Du nur zu casten (wobei upcast auch implizit geht)
void test(base* e); erbe* e = new erbe; test(e);
-
das hab ich jetzt nicht verstanden...
warum wird da neues Objekt erstellt?
-
Weil Du ohne Objekt kein Objekt übergeben kannst?
-
TheShadow2000 schrieb:
mit this könnte ich einen pointer übergeben. mit test(erbe) klappt es hingegen nicht. Wie kann ich es ohne this lösen?
Ich verstehs nicht was Du meinst, willst Du einfach einen Zeiger auf Dein Object?
erbe e; e.a = 1; //... test(*e);
-
ach nö... ihr erstellt doch neue Objekte, welche mit basisobjekt nix zu tun haben! Logisch muß ich irgendwas von Objekt übergeben (und nicht etwa die Klasse)
was mir einfällt wäre eine getthis()-methode in basisfunktion, welche ich dann aus neuer klasse auslese und dann weiterreichen kann...
-
Hatte nicht gedacht dass es so schwer ist von einem beliebigen erbe* Zeiger auf den konkreten this-Zeiger eines erbe-Objektes (in einer erbe-Methode) zu schliessen...
void test(base* e); void erbe::tuwas() { test(this); }
-
this is ein ganz normaler rvalue-zeiger der den gewöhnlichen regeln hinsichtlich impliziter (und expliziter) konvertierungen unterliegt.
class base { public: int a; }; void bar(base*); class erbe: public base { public: int a; int foo() { int a; a=1; erbe::a=2; base::a=3; bar(this); // konvertiert this implizit in einen base* pointer der auf das base-subobjekt des aktuellen objekts zeigt } };