class operator auf andere klasse umleiten?



  • ich wollte in einer klasse einen operator so definieren,
    dass wenn ich darauf zugreife, ich automatisch auf die members der im operator definierten klasse zugreifen kann.
    diese subklasse ist definiert!

    also beispiel (hier operator >> missbraucht):

    CMyClass1
    {
    public :
    CSubClass2 MySubClass2 ;
    operator>>(???)
    {
    ???
    }

    }MyClass1;

    damit das funkz

    MyClass1>>FuncOfSubClass2();

    geht das überhaupt?



  • das ist ueberhaupt nicht zu verstehen.
    du haettest wenigstens FuncOfSubClass2() in MySubClass2 definieren koennen.
    damit das so geht, wie du vermutlich willst, muesste der op static sein, ich weiss nicht genau, ob das geht, alber selbst wenn, dann kriegst du es nur auf die syntax
    Klasse1>>&Klasse1::Klasse2::func;
    aber du musst das fuer jede signatur extra (oder als template?) machen.
    ist doch aber nicht noetig, wenn die subklasse public ist.
    und wenn sie private waere, ginge es nicht, man wuerde dann wrappermethoden fuer die methoden der (implementations-) klasse machen.

    edit: ok, geht nicht static, muss mindestens einen parameter haben, dessten typ ne klasse ist;

    [ Dieser Beitrag wurde am 09.07.2003 um 20:16 Uhr von PeterTheMaster editiert. ]



  • vielleicht gehts mit ->

    class A {
      B b;
    public:
      B* operator->() { return &b; }
    };
    // ...
    A a;
    a->methode_von_B();
    

    Ist aber ziemlich daneben, krank und nicht zur Nachahmung empfohlen.



  • Das riecht nach einem Anwendungsfall, der auf die Idee des State-Pattern hinaus läuft - innen das Objekt umschalten, außen nur ein Objekt halten.



  • also so wie es Bashar gezeigt hat funkz es.

    vielen dank

    was passiert aber wenn ich den operator -> verwende, der doch eigentlich für Zeiger auf objekte verwendet wird?
    wie kann ich dann das weiterverwenden?



  • Was bezweckst Du eigentlich damit? Daß ein Objekt von Außen her anders aussieht, aber Innen ein anderes Verhalten zeigt?

    Die Konstruktion ist zwar möglich, aber das versteht doch hinterher keine Sau mehr, um das mal deutlich zu sagen. Jede Konstruktion wo man länger als 5 Minuten über eine Klassendeklaration nachdenken muß hat irgendwo bereits einen Geburtsfehler.



  • nun das ist schwer zu erklären
    ich habe zwei klassen,
    die eine existiert schon länger und die andere schreibe ich gerade.
    es geht darum HTTP-Header auszulesen (Klasse 1) und
    zu schreiben (Klasse2).

    Die Klasse1 verwendet zum lesen einen String der den kompletten Header durch breaks getrennt, beinhaltet.

    jedesmal wenn ich den HTTP-Header in der klasse2 ändere und dann im code doch nochmal etwas auslesen möchte, verwende ich den Operator (oder methode),
    um eine temporäre Klasse1 zu erstellen, die die HTTP-Header-liste als String mit breaks besitzt.
    es vereinfacht nur den gedanken,
    dass man in der liste, die einfacher zuhandhaben ist (hinzufügen und besonders ändern), alles machen kann was auch mit der klasse1 möglich ist.

    natürlich könnte ich klasse2 von klasse1 ableiten,
    aber dann müsste ich auf die liste verzichten, oder alle methoden der klasse1 auf die liste ausrichten. In diesem Fall müsste ich eine Fehler anfällige Methode schreiben die ein char* in die Liste konvertiert.(jede break zeile ist ein eintrag)


Anmelden zum Antworten