counter erhöhen



  • int counter=StrToIntDef(Edit1->Text, 0); 
    Edit1->Text = IntToStr(counter +1);
    

    Da passiert aber das selbe wie bei meinem Source Code ...



  • was genau passiert denn eigentlich bei deinem Quellcode und was bei dem von Akari? wobei der Quellcode von Akari genau das macht was du wolltest...



  • Bei mir:

    Ich klicke auf den Button im Edit Feld steht eine 1.

    Bei akari:

    Ich klicke auf den Button im Edit Feld steht eine 1.



  • Linnea möchte, dass du mal nachvollziehst, was der Code selbst macht.
    Also quasi den Code nach Deutsch übersetzen. Dann sollte dir eigentlich klarwerden, warum das Ergebnis so ist, wie es ist.



  • Ich weiss doch wieso das s ist -.-

    counter+1 = 1

    es wird halt um eins erhöht beim ersten klick



  • Kann mir den keiner sagen wie das geht 😞



  • Hallo

    Ich habe dir doch schon den kompletten korrekten Code geschrieben, den du nur noch in deine Button-Methode kopieren must. Was stört dich daran?

    bis bald
    akari



  • wtf jetzt gehts eben ging es net.

    ich hab einfach den c builder nochmal neu gestartet.

    ty für die hilfe



  • <nörgel>
    Auch wenn es trivial ist. Die Lösung von akari ist ja zum einen nicht ganz korrekt, da ja das TEdit "manipuliert" werden kann.
    Und es wird hin und her gecastet.
    </nörgel>

    static int counter = 0;
       Edit1->Text = IntToStr(++counter);
    


  • Wozu das static? Das verändert den Scope richtig? Dann bleibt der Variableninhalt bis zum nächsten Funktionsaufruf erhalten sagt die Hilfe. Ist das besser als ne private-Membervariable? Oder egal?



  • Das static bewirkt nur das die Variable noch dem verlassen des Scopes nicht aus dem Speicher entfernt wird.
    Die Variable existiert aber trotzdem nur in diesem Scope. Von einer anderen Methode aus kannst du darauf nicht zugreifen.
    Bei einer Membervariable kannst du von jeder deiner Methoden auf die Variable zugreifen. Sie wird erst gelöscht wenn der Destruktor deiner Klasse aufgerufen wird.



  • Hallo

    außerdem hast du eine statische Variable genau einmal pro Klasse, eine (nichtstatische) Membervariable aber pro Klasseninstanz.

    bis bald
    akari



  • Hmm... mit dem unterschiedlichen Zugriff auf static-Variable und private-Membervariable ist jetzt klar, Danke. Aber das kann doch nicht Alles sein?

    Jetzt kam grad akari's Post:
    Was ne Klasse ist weiß ich ja, nur mit dem Begriff "Klasseninstanz" tu ich mich schwer... Ich lese so oft von Instanzen, aber so richtig begriffen hab ich's noch nicht.



  • Hallo

    // Klasse wird deklariert
    class Klasse
    {
    };
    
    // Instanz von Klasse mit Namen "instanz" wird deklariert und initialisiert
    Klasse instanz;
    // Noch eine Instanz derselben Klasse
    Klasse instanz2;
    

    bis bald
    akari



  • Cool, Danke! Das ist ja einfach - wenn ich also eine Klasse vererbe, ist die neue Klasse ein Instanz der Ursprungsklasse... Dann weiß ich doch worum es geht 🙂
    Wenn ich also eine static-Variable in einer Klassenmethode definiere und die Klasse dann vererbe (instanziiere?), greift die Methode der Klasseninstanz auf dieselbe Variable zu wie die Ursprungsklasse (selbe Speicherstelle). Ich kann somit den Inhalt einer Variablen auch vererben. Im Gegensatz dazu wird eine Member-Variable neu angelegt (zusätzliche Speicherstelle). Right? Hab ichs?



  • Hallo

    Vererbung hat mit Instanzierung nichts zu tun. Wo siehst du in meinem Code eine Vererbung?

    bis bald
    akari



  • Ne mit vererben hat das ganze hier noch garnichts zu tun.
    Selbst wenn du deine Klasse vererbst kannst du niemals den Inhalt der Membervariablen vererben.
    Du definierst in deiner Klasse deine Variable counter.
    Dann kannst du 1000 Klassen instanzieren und hast dann insgesamt auch 1000 verschiedene Counter, die nur in der eigenen Instanz gültig sind.



  • Damn, ich hab's geahnt - doch nix begriffen... Ich schau mal bei Wiki, was ne Instanz ist. Dachte das wär ne Kopie der Klasse... 😞

    Edit: Also für OttoNormalProleten ist die Instanz(Informatik)-Erklärung bei Wiki nich geschrieben 🤡

    Eine Folgerung trotzdem: Eine Instanz einer Klasse hat die Eigenschaften der Klasse, ist aber keine neue Klasse und deswegen hat das auch nichts mit Vererbung zu tun... ?



  • Naja in Wiki würde ich da nicht schauen.
    Ich würde eher ein Tutorial zu C++ Grundlagen suchen.



  • Hallo

    Eine Klasse ist ein Konzept. Eine Instanz ist die konkrete Umsetzung dieses Konzepts mit der du im Arbeitspeicher agieren kannst.
    Als Beispiel Mensch und Person :
    Der Begriff "Mensch" definiert eine Klasse von Lebewesen mit genau festgelegten Merkmalen, die sie von andern Klassen wie Affen unterscheidet. Eine konkrete Person wie ich zum Beispiel ist eine Instanz dieser Klasse Mensch, nicht identisch mit anderen Personen der gleichen Klasse aber doch durch das gleiche zugrundeliegende Klassenprinzip ähnlich.

    bis bald
    akari


Anmelden zum Antworten