[Klassen]Funktion automatisch aufrufen



  • Meinst Du sowas?

    KLASSE meineKlasse( a, b );
    cout << meineKlasse.Ergebnis;
    

    Oder was meinen mit "automatisch"?

    Du kannst "addiere" vom Konstruktor aus aufrufen lassen wenn Du das mit automatisch meinst:

    class KLASSE {
    private:
      int a;
      int b;
    
    public:
      int ergebnis;
    
      KLASSE(int a_, int b_): a(a_), b(b_) { addiere(); }
      void addiere(void) { ergebnis = a + b; }
    };
    


  • Ich meine das so:

    class meineKlasse
    {
        public:
            int a;
            int b;
            int c;
    
            void addition (a, b)
            {
                c = a + b;
            }
    };
    int main ()
    {
        meineKlasse mK;
        mK.a = 10;
        mk.b = 5;
        mK.addition (a, b); //Den Teil möchte ich eben nicht schreiben müssen
        cout << c; //Ausgabe 15
    
        return 0;
    }
    

    Also die Methode soll eben schon in der Klasse aufgerufen werden, ohne das ich sie nocheinmal extra aufrufen möchte.

    Mfg Ominion



  • Dan mach dir Setter-Funktionen für deine member a und b.
    jedesmal wenn a oder b verändert wird, c neu berechnen.



  • Ominion schrieb:

    Also die Methode soll eben schon in der Klasse aufgerufen werden, ohne das ich sie nocheinmal extra aufrufen möchte.

    Das geht nicht, wenn a, b und c int bleiben sollen.

    Die Parameter bei addition brauchst du übrigens nicht.



  • /edit: der Parameter c ist Quatsch

    class meineKlasse
    {
        int a;
        int b;
    
    public:
        void setA (int val)
        {
            a = val;
        }
        void setB (int val)
        {
            b = val;
        }
        int getC ()
        {
            return a + b;
        }
    };
    
    int main ()
    {
        meineKlasse mO; // meinObjekt
        mO.setA (10);
        mO.setB (5);
        cout << mO.getC (); //Ausgabe 15
    }
    


  • Anscheinen gibt es wohl nicht das was ich suche 😞
    Trotzdem Thx @all für die Hilfe.

    Mfg Ominion



  • Ominion schrieb:

    Anscheinen gibt es wohl nicht das was ich suche 😞

    Das gibt es schon. Aber eben nicht mit eingebauten Datentypen.



  • Hallo

    noch ein bißchen anders

    class meineKlasse
    {
        int a;
        int b;
    
    public:
       meineKlasse() : a(0), b(0), c(0) {};
    
        void setA (int val)
        {
            a = val;
            c = a + b;
        }
        void setB (int val)
        {
            b = val;
            c = a + b;
        }
        int getC ()
        {
            return c;
        }
    };
    
    int main ()
    {
        meineKlasse mO; // meinObjekt
        mO.setA (10);
        mO.setB (5);
        cout << mO.getC (); //Ausgabe 15
    }
    

    aber der Effekt und die Anwendung der Klasse ist immer derselbe.

    bis bald
    akari



  • Mit der Addition war das ja auch nur ein Beispiel! In meinen Klassen rufe ich eigentlich nur Funktionen auf, welche mit übergebenden Variablen arbeiten (z.B übergebe ich einen char-Array, welcher dann mit SetWindowText() verarbeitet wird).

    Mfg Ominion



  • Exakt genauso sah mein Beitrag auch aus, bevor mir klar wurde das die Membervariable c völlig unsinnig ist, da sie ja (zumindest bei den bisherigen Informationen) immer von a und b abhängt 😉

    @Ominion: Wenn du sowas wie Properties in C# meinst, musst du sie dir Wohl oder Übel selber bauen, möglich ist es aber. Wenn du noch nicht so viel Erfahrung mit C++ hast, dann verwende halt die typischen getter- und setter-Methoden.



  • Hallo

    c mag in diesem Einfachen Fall sicher überflüssiger sein.
    Aber wenn die Rechnung anstatt einer Addition eben komplexer und zeitintensiver, und öffter auf das Ergebnis zugegriffen als die Ausgansgwerte verändert werden, ist mein zweiter Post empfehlenswerter.

    bis bald
    akari



  • .filmor schrieb:

    Exakt genauso sah mein Beitrag auch aus, bevor mir klar wurde das die Membervariable c völlig unsinnig ist, da sie ja (zumindest bei den bisherigen Informationen) immer von a und b abhängt 😉

    @Ominion: Wenn du sowas wie Properties in C# meinst, musst du sie dir Wohl oder Übel selber bauen, möglich ist es aber. Wenn du noch nicht so viel Erfahrung mit C++ hast, dann verwende halt die typischen getter- und setter-Methoden.

    nach meinen propertie versuchen kann ich sagen:

    properties sind möglich, solange man nicht mehr als nen int oder char abbilden will. mit allem was darüber hinaus geht wirds schwierig



  • Hmm, geht das nicht Templatemäßig? So in der Art:

    class Test
    {
        int _member;
    
        struct Property1 : public simple_property<int>
        {
            Property1 (int& ref) : simple_property<int> (ref);
        };
    
        // oder
    
        struct Property2_Policy
        {
            typedef double Type;
    
            static const Type& get ()
            { return 3.141; }
    
            static void set (const Type& par);
        };
    
        typedef property<Property2_Policy> Property2;
    
    public:
        Property1 a;
        Property2 b;
    };
    
    // mit diesen Templates:
    
    template <typename Type>
    class simple_property
    {
    public:
        // ... Ein Haufen von friends und Operatoren (die Binären können als Template
        //     Funktionen ausgelagert werden
        simple_property (Type& ref) : _ref (ref)
        {}
    private:
        Type& _ref;
    };
    
    template <typename PolicyT>
    class property
    {
    public:
        // Wie oben, nur dass nicht jedesmal auf _ref zugegriffen wird, sondern
        // die get und set Methode von PolicyT verwendet wird.
    };
    

    Klar geht das auch noch einfacher, ist halt nur jetzt schnell zusammengezimmert ;). Am schönsten wäre wohl sowas wie boost::iterator_adaptor, wo die ganzen Funktionen privat in der Klasse selbst stehen, dass wäre aber noch mehr Schreibarbeit gewesen.



  • Könntest du mir erklären was ein Template ist? also ich weiß, dass das zum Beispiel eins ist:

    <typename Type>
    

    Aber wozu es dient, wie man es erstellt und in welchen Zusammenhang man es benutzt weiß ich nicht :p

    Mfg Ominion



  • Hallo

    Siehe hier.

    bis bald
    akari



  • Oder schau mal im Magazin-Teil.
    Vor einiger Zeit ist da ein Artikel über Templates erschienen.


Anmelden zum Antworten