Crosscast



  • hi,
    ich bin gerade bei meinem taeglich struppi ueber einen begriff gestolpert, welchen ich nicht ganz nachvollziehen kann. ich glaube crosscasts muss ich hier nicht gross erklaeren. aber wie kann man klassen, die nicht einmal aehnliche membervariablen bzw. funktionen haben muessen, aequivalent verwenden?mir kommt es so vor, als ob es dadurch moeglich waere absolut sinnfreie casts durchzufuehren, wie z.b.
    [verrueckt]
    wenn ich einen ich std::string in einen std::vector<double> casten koennte.
    [/verrueckt]
    ich wollte wissen wie der dynamic_cast arbeitet bzw. ob ich ihn mit einem reinterpret_cast vergleichen koennte.
    vielleicht kann wer von euch licht ins dunkel bringen und mir das alles naeher bringen.

    was auch immer



  • Nein also std::vector in std::string geht mit dynamic_cast auch nicht - da Bedarf es schon einer Konvertierungsfunktion, wenns überhaupt sein soll...

    reinterpret_cast hat zudem wenig mit einem dynamic_cast zu tun. Benütz mal die Suche, es finden sich genügend Themen zu den C++-Casts

    Zur Benützung von fremden Klassen mit gleichen Zugriffsmethoden wären zB Iteratoren sehr gute Beispiele.

    Versteh aber deine Frage nun nicht wirklich 🙄

    MfG SideWinder



  • was auch immer schrieb:

    ich glaube crosscasts muss ich hier nicht gross erklaeren.

    Bist du sicher, dass du es könntest? Wenn ich deine Frage richtig interpretiere, dann bist du derjenige, der die Bedeutung eines Crosscasts nicht verstanden hat.

    Ein Crosscast hat überhaupt nichts mit einem Cast zwischen nicht verwandten Typen wie z.B. zwischen string und vector zu tun. Vielmehr castest du hier zwischen Geschwisterklassen einer Hierarchie.



  • Ein Crosscast hat überhaupt nichts mit einem Cast zwischen nicht verwandten Typen wie z.B. zwischen string und vector zu tun. Vielmehr castest du hier zwischen Geschwisterklassen einer Hierarchie.

    Das heist ja:

    class A{};
    class B:public A{};
    class C:public A{};
    //...
    B*b;
    C*c=sataic_cast<C*>(b);
    

    Nun versteh ich aber nicht wirklich wo das brauchbar wäre und vielmehr wieso man das tun sollte. Ein B ist ein A aber kein C.



  • B wird in A gecastet, dann wiederum in C.
    Was ist eigentlich ein sataic_cast? 😉
    geloescht



  • so hat das natürlich keinen sinn.
    spannend und kompilierbar wird es erst mit dynamic_cast

    class A {
    public:
    	virtual ~A() {}
    };
    
    class B {
    public:
    	virtual ~B() {}
    };
    
    class C : public A, public B {
    };
    
    int main() {
      A *a = new C;
      B *b = dynamic_cast<B*>(a);
    }
    


  • Danke davie jetzt versteh ich mal wo das Sinn macht.



  • ok. vielleicht habe ich mich etwas umstaendlich audgedrueckt. mir faellt momentan kein gutes beispiel ein, aber ich versuchs mal:
    nehmen wir eine klasse auto die von klasse vehikel und klasse haendler erbt. warum sollte es jetzt moeglich sein ein vehikel in ein haendler und umgekehrt zu casten. das ist es was ich nicht verstehen kann, da die implementation komplett anders sein wuerde und diese zwei klassen nichts miteinander gemeinsam haben.

    was auch immer


Anmelden zum Antworten