Klassen Object Funktion zuweisen Frage



  • HI Leute,
    ich hab ne frage, kann ich einem object einer klasse nachdem ich sie erstellt habe eine funktion zuweisen?

    also ich schreibe ne klassen:
    sie heißt z.b.

    class rechner
    

    diese klasse enthält auch ein paar funktionen etc.
    nun erstelle ich halt zwei object dieser klasse:

    rechner rechner1, rechner2;
    

    kann ich nun irgentwie machen das ich einer leerenfunktion von rechner in rechner1 z.b. a+b gebe und der von rechner 2 a+b+c+d ? also nach dem motto :

    rechner1.leerfunk(int a, int b){
       return a+b;
    }
    rechner2.leerfunk(int a, int b, int c, int d){
       return a+b+c+d;
    }
    

    Mfg MrHut



  • na klar...
    Das Ganze nennt sich Überladen.
    Das heißt du deklarierst die Methode in deiner Klasse mit einer anderen Signatur.

    z.B.:

    class rechner
    {
        private:
         ...
        public:
           void leerfunk(int a, int b){return a+b}
           void leerfunk(int a, int b, int c, int d){return a+b+c+d}
    };
    

    dann kannst du auch für verschiedene Instanzen deiner Klassen verschiedene Methoden aufrufen, bzw. die Überladene.

    rechner rechner1, rechner2;
    rechner1.leerfunk(a, b);
    rechner2.leerfunk(a, b, c, d);
    


  • wobei das in dem fall etwas doof wäre, da man eifnahc mehrere methoden aufrufe(oder überladene operatoren) aneinander koppeln kann...





  • MrHut schrieb:

    HI Leute,
    ich hab ne frage, kann ich einem object einer klasse nachdem ich sie erstellt habe eine funktion zuweisen?

    kann ich nun irgentwie machen das ich einer leerenfunktion von rechner in rechner1 z.b. a+b gebe und der von rechner 2 a+b+c+d ?

    Ja, wobei du dann von jeder Instanz beide Funktionen aufrufen kannst.
    In diesem Fall könntest du es auch mit Defaultparametern lösen (wenn 3 Parameter auch erlaubt sind):

    class rechner
    {
       // ...
       public:
          void leerfunk(int a, int b, int c = 0, int d = 0);
    };
    
    void rechner::leerfunk(int a, int b, int c, int d)
    {
       return a + b + c + d;
    }
    


  • sry ihr habt mich falsch verstanden ^^

    ich mein das man die funktion erst später deklariere ...

    also wie ich oben schon gesagt habe ...

    wenn ich das objekt erstellt habe dann erst deklariere

    normal is ja so

    class rechner
    {
       public:
          void abc();
    };
    
    void rechner::abc
    {
       return a + b + c + d;
    }
    

    ich mein halt danach erst deklairern ^^

    mfg MrHut

    sry kann mich nicht richtig ausdrücken ...



  • Man kann keine Funktionen für Instanzen definieren (deklarieren schon mal sowieso nicht :)), nur für Typen.



  • Ich denke mal, dass er sowas, wie Funktionszeiger haben will.

    http://tutorial.schornboeck.net/funkt_zeiger.htm

    http://www.newty.de/fpt/index.html



  • MrHut schrieb:

    ich mein das man die funktion erst später deklariere ...
    [...]
    wenn ich das objekt erstellt habe dann erst deklariere

    Wozu benötigst du denn das? Eventuell wären wie gesagt Funktionszeiger etwas, aber ich hab das Gefühl, das wäre auch einfacher zu lösen 😉

    Warum machst du nicht verschiedene Klassen, wenn die Instanzen unterschiedliche Funktionen haben sollen? Oder einfach mehrere Funktionen in der gleichen Klasse?


Anmelden zum Antworten