Einsatz einer Klasse nötig?



  • guten tag forum!
    ich schreibe an einem grösseren projekt und bin nun an einen punkt angelangt an dem ich mir nun überlege eine Klasse einzusetzen. ich habe allerdings noch nicht so den plan von der philosophie der klassen.

    problembeschreib:
    ich muss aus verschiedenen funktionen auf ein paar variablen zugreifen und dessen werte ändern. da ich jetzt aber nicht weis, wievielmal dies geschehen soll und ich eigentlich auch nicht extra alle variablen mehrfach (mit verschiedenen namen) deklarieren möchte, denke ich, der einsatz einer Klasse ist meine problemlösung!?

    wie soll ich das jetzt am besten anhand eines beispiels demonstrieren. also.
    ich benötige 4 variablen. zwei vom typ int und zwei vom typ const char*. jetzt möchte ich aus verschiedenen funktionen auf diese variablen zugreiffen und die werte ändern. der wichtige teil davon ist, jede funktion soll die klassenelemente als seine eigenen sehen, verstanden? kleines beispiel (bitte kommentare gut beachten):

    //Die Klasse stelle ich mir inetwa so vor.
    class CEngine
    {
    	public:
    			int	id[250];
    			int Count;
    			const char *Split;
                const char *tmp_Split;
    };
    
    //Funktion1 die nun auf die elemente zugreifft
    //und die elemente "als sein eigenes sieht".
    void Funktion1()
    {
    	CEngine *ptrEng;
        ptrEng->Count = 0; //Count ist hier 0
        ptrEng->Count++; //Count ist hier 1
        ptrEng->Split = "Ich bin der split"; //Split ist hier "Ich bin der split"
    }
    
    void Funktion2()
    {
    	CEngine *ptrEng;
        ptrEng->Count = 20; //Count ist hier 20 @@ SOLL ABER FÜR FUNKTION1 "0" BLEIBEN @@
        ptrEng->Count++; //Count ist hier 21 @@ SOLL ABER FÜR FUNKTION1 "1" BLEIBEN @@
        ptrEng->Split = "test"; //Split ist hier "test" @@ SOLL ABER FÜR FUNKTION1 "Ich bin der split" BLEIBEN @@
    }
    

    ich hoffe ich versteht was ich meine. 👍



  • class CEngine
    {
        public:
                int    id[250];
                int Count;
                const char *Split;
                const char *tmp_Split;
    };
    

    wieso als class? die gute alte struct würds hier auch tun, und du sparst dir das nervige public 😉

    CEngine *ptrEng;
    

    ich wette mit dir, dass dein programm beim ersten variablenzugriff abstürzt!

    in deinem beispiel hat eine Klasse selber keinen sinn,da function 1 und 2 nicht für das gleiche objekt aufgerufen werden dürfen,aber so wie dus bisher hast ist es ok(nur halt nicht nach der klassen philosophie)



  • ja dann gib halt jeder klasse eine "funktion1",

    struct CEngine
    {
        int id[250];
        int Count;
        const char *Split;
        const char *tmp_Split;
    
        void Funktion1();
    };
    

    jetz haste für jede Instanz der Klasse deine eigene Funktion1.
    Das wolltest du doch oder? 😕



  • otze nimms mir nicht übel, aber wenn schon, dennschon klassen damit ichs auch checke mit dem ganzen klassen wirrwarr 😃

    k1ro danke das klingt doch schonmal gut. zudem weis ich nun auch wozu man in einer klasse funktionen sieht. wie nennt man das eigentlich genau? Member funktion? also void Funktion1(); ist nun eine meberfunktion der klasse CEngine, richtig? und muss ich das jetzt so machen das ich dies erreiche was ich erreichen möchte?:

    class CEngine
    {
        public:
                int id[250];
                int Count;
                const char *Split;
                const char *tmp_Split;
    
                void Funktion1();
                void Funktion2();
    };
    

    das ist es?



  • ne, er will dass 2 funktionen den gleich objecttyp benutzen, also keine Klasse



  • ich muss mein beispiel ändern. es bleibt eigentlich gleich nur das der zugriff nicht aus verschiedenen funktionen erfolgt, sondern aus verschiedenen anweisungen/schleifen. und eben, ich möchte es gerne mit einer klasse lösen 😉

    SO MEINE ICH DAS

    void TheFunktion()
    {
    if(IRGENDETWAS)
    {
        CEngine *ptrEng;
        ptrEng->Count = 0; //Count ist hier 0
        ptrEng->Count++; //Count ist hier 1
        ptrEng->Split = "Ich bin der split"; //Split ist hier "Ich bin der split"
    }
    else
    {
        CEngine *ptrEng;
        ptrEng->Count = 20; //Count ist hier 20 @@ SOLL ABER FÜR DAS OBERE "0" BLEIBEN @@
        ptrEng->Count++; //Count ist hier 21 @@ SOLL ABER FÜR DAS OBERE "1" BLEIBEN @@
        ptrEng->Split = "test"; //Split ist hier "test" @@ SOLL ABER FÜR DAS OBERE "Ich bin der split" BLEIBEN @@
    }
    }
    


  • ändert nix am prinzip-.-
    jeder teil der funktion erstellt sein eigenes objekt, da ist kein ansatzpunkt für ne Klasse!



  • ok egal. aber das müsste auch mit klassen gehen oder? nur das ich das für die zukunft mal weis, da ich mir das buch von marcus bestellt habe :-). ich meine stell dir mal folgendes vor. du schreibst ein spiel mit multiplayer etc. jetzt ist dein spiel fertig und nun spielen ein haufen spieler. alle spieler greiffen auf die sagen wir mal CBasePlayer klasse zu, in der attribute wie health etc. sind. nun wird ein spieler getroffen. ohne die verwendung einer klasse würde nun von allen spieler "health" runter gehen und das wollen wir doch nicht. sofern glaube ich also mit einer klasse geht das doch, das jeder spieler eine (instanze????) der klasse hat. 🕶 🙄



  • das geht, aber in deinem beispiel ist keine(!) ansatzmöglichkeit für eine Klasse, das kannste drehen und wenden wie du willst!


Anmelden zum Antworten