parameter als neutrales objekt



  • ich schreibe eine funktion und hätte als parameter gerne objekte von verschiedenen
    klassen, kann man da etwas neutrales einsetzen?



  • steff3 schrieb:

    ich schreibe eine funktion und hätte als parameter gerne objekte von verschiedenen
    klassen, kann man da etwas neutrales einsetzen?

    Um dir ernsthaft helfen zu können, solltest du die Frage noch ein wenig konkretisieren. In welchen Beziehungen stehen die Klassen der Objekte zu einander, etc.

    Gruß Caipi



  • Caipi schrieb:

    steff3 schrieb:

    ich schreibe eine funktion und hätte als parameter gerne objekte von verschiedenen
    klassen, kann man da etwas neutrales einsetzen?

    Um dir ernsthaft helfen zu können, solltest du die Frage noch ein wenig konkretisieren. In welchen Beziehungen stehen die Klassen der Objekte zu einander, etc.

    Gruß Caipi

    sie sind alle von CObejct abgeleitet



  • steff3 schrieb:

    Caipi schrieb:

    steff3 schrieb:

    ich schreibe eine funktion und hätte als parameter gerne objekte von verschiedenen
    klassen, kann man da etwas neutrales einsetzen?

    Um dir ernsthaft helfen zu können, solltest du die Frage noch ein wenig konkretisieren. In welchen Beziehungen stehen die Klassen der Objekte zu einander, etc.

    Gruß Caipi

    sie sind alle von CObejct abgeleitet

    Wenn sie jetzt noch public abgeleitet sind, hilft dir wahrscheinlich "die Polymorphie" weiter.

    Beispiel:

    struct CObject
    {
         // ...
         virtual foo() const { cout << "CObject::foo()\n"; }
         // ...
    };
    
    struct CDerived : public CObject
    {
         virtual foo() const { cout << "CDerived::foo()\n"; }
         // ...
    };
    
    struct CDerived2 : public CObject
    {
         virtual foo() const { cout << "CDerived2::foo()\n"; }
         // ..
    };
    
    // Der unten angegebenen Funktion kannst du nun Objekte vom Typ CObject (und allen davon abgeleiteten Objekten) übergeben,
    // trotzdem kann sich Verhalten von foo() je nach Klasse unterscheiden.
    void f(const CObject& rhs)
    {
        rhs.foo(); // wenn CObject& auf ein CObject verweist, wird "CObject::foo()" ausgegeben.
                   // falls CObject& dagegen auf ein CDerived verweist wird "CDerived::foo()" ausgegeben, usw.
    }
    

    Falls sich die Objekte - egal welchen Typs - gleichverhalten sollen, brauchst du die Polymorphie nicht.

    Schau dir am besten das Thema Polymorphie genauer an :).

    Gruß Caipi



  • steff3 schrieb:

    ich schreibe eine funktion und hätte als parameter gerne objekte von verschiedenen
    klassen, kann man da etwas neutrales einsetzen?

    Ja - programmiere die Funktion einfach als Template. Statt

    void print( int x, std::ostream& out )
    {
        out << x;
    }
    void print( const MyClass& x, std::ostream& out )
    {
        out << x;
    }
    

    besser

    template< typename T >
    void print( const T& x, std::ostream& out )
    {
        out << x;
    }
    

    Gruß
    Werner


Anmelden zum Antworten