Dateityp für alles?



  • Hallo!

    Ich habe zb folgende Interfaceklasse:

    class A {
    public:
        virtual void GetData(????) = NULL;
    };
    

    Ich weiss nicht was ich in die Parameterliste schreiben will da die davon
    abgeleiteten klassen unterschiedliche daten enthalten zb eine nen integer die
    andere nen string.

    class Abg1: public A{
    int a;
    public:
        void GetData(int& var);
    };
    
    class Abg2: public A {
    string text;
    public:
        void GetText(string& text);
    };
    

    Wie mache ich jetzt das in der Interfaceklasse?!?

    Schonmal danke für die Hilfe



  • asdfasfsadfasf schrieb:

    class A {
    public:
        virtual void GetData(????) = NULL;
    };
    

    Erstmal, NULL hat hier nichts zu suchen, da das für Zeiger vorgesehen ist. Schreib einfach 0.
    Und zu deinem Problem, wenn du verschiedene Daten hast, dann mach auch verschiedene Funktionen dafür.

    class A
    {
    public:
        virtual void GetData(int& var) = 0;
        virtual void GetData(string& text) = 0;
    };
    

    Du kannst zwar auch Typen für verschiedene Werte benuzen, wie zB boost::variant. Dann versteh ich aber nicht, warum du dafür 'ne Funktion in einer abstrakten Klasse brauchst. Denn irgendwie musst du ja die Werte unterschieden, eine Schnittstelle ist aber für alle abgeleiteten Klassen dieselbe.



  • Sowas nennt man kaputtes Design. Überleg dir besser nochmal ob du die Funktionalität wirklich brauchst, normalerweise braucht man sowas nicht.



  • Naja lasse einfach die Methode im Interface weg 🙄 implementiere sie in den abgeleiteten Klassen kannst ja dann über nen Cast auf die unterschiedlichen Methoden zugreifen...



  • Ich weis ja nicht was er machen will, aber wenn er Polymorphie nutzt ist es eigentlich Sinn der Sache den genauen Typ nicht zu kennen und nur über eine minimale Schnittstelle drauf zuzugreifen, ansonsten braucht er Polymorphie überhaupt nicht.



  • Stimmt. Er könnte auch einfach die Daten die er von außen braucht im Konstruktor als Referenz übergeben...


Anmelden zum Antworten