Welche pure virtual Methoden muss man implementieren?



  • Optimizer schrieb:

    volkard schrieb:

    lol!
    ihr habt echt zu vel am farbtopf geschnuppert.

    den pur virtuellen basisklassendestruktor MUSS man implemetieren, denn er WIRD (vom abgeleiteten destruktor) aufgerufen.

    Ich möchte das jetzt so vorsichtig wie nur irgendmöglich ausdrücken:
    Ich finde diese Frage nicht geeignetm um zu prüfen, ob jemand OOP verstanden hat. 😡

    😉

    <streitheraufbeschwör>
    Sehe ich genauso.
    </streitheraufbeschwör>



  • breaktogether schrieb:

    <streitheraufbeschwör>
    Sehe ich genauso.
    </streitheraufbeschwör>

    ich auch.



  • das beispiel war eigentlich tief aus der grundlagenschublade, das müßt ihr zugeben. ihr hattet alle zutaten. aber die praxis fehlt. und meist endet die grundlagenausbildung recht aprupt, wenn GUI anfängt und man macht erstmal zwei bis fünf jahre nur noch farben statt inhalten.

    Ach und wann macht ein pure virtueller Destruktor in einem Interface Sinn? Ein virtueler ja und den implementiere ich immer gleich mit ~Foo(){}.

    den pur virtuellen basisklassendestruktor MUSS man implemetieren, denn er WIRD (vom abgeleiteten destruktor) aufgerufen

    Du wirst wahrscheinlich geschockt sein aber es gibt Compiler die fals es kein Basisklassendestruktor gibt davon ausgehen, dass die Basisklasse keinen brauch und ihn einfach nicht aufrufen! Und da du wie du in einen anderen Threat bereits gesagt hast nicht so sehr auf den Standard achtest ist diese kleine Verletzung ja wohl kein Problem oder?

    bei GUI in c++ sollte man sehr sicher mit OO (mit "wie mache ich OO mit c++") und so sein, denn die GUI-libs sind allesamt scheußlich designed. wenn man sich da was abguckt, kriegt der eigene code sofort pest und cholera zugleich.

    Wie wahr, wie wahr. Aber was gibt es für Alternativen? Ein Unendlichkeit und einen Tag darauf verwenden die "prefekte" Wrapper lib zu coden und an jeden Unwahrscheinlichkeit gedacht zu haben um dann fest zustellen, dass man der einzige ist der seinen Code noch verstehen kann und dann in ein kleines Problem läuft, an das man nicht beim designen nicht gedacht hatte, und dann Stunden darauf verwendet eine Elegante Lösung zu finden. Dann stellt man fest, dass die Lösung die von der Sprache vorgeschlagen ist unelegant ist und versucht mit Preprocessor instruction der Sprache seinen eigenen Syntax aufzubrummen. Und wenn endlich mit dem Design fertig ist ist man reif für die Rente.

    Gutes Design ist etwas wertvolles aber vergiss nicht ein Program ist dazu da zu laufen und nicht um gut designed zu sein.



  • Ach und wann macht ein pure virtueller Destruktor in einem Interface Sinn?

    wer sagt, daß er "in einem interface" sinn machen muß? vestehst du "interface" so, wie
    die java-leute?
    in c++ macht er dann sinn, wenn man eine klasse abstrakt machen will (und das ist ne
    inhaltliche entscheidung), aber keine andere methode reinstopfen will (wieder inhaltlich).

    Du wirst wahrscheinlich geschockt sein aber es gibt Compiler die fals es kein Basisklassendestruktor gibt davon ausgehen, dass die Basisklasse keinen brauch und ihn einfach nicht aufrufen! Und da du wie du in einen anderen Threat bereits gesagt hast nicht so sehr auf den Standard achtest ist diese kleine Verletzung ja wohl kein Problem oder?

    dann geb ich der basisklasse halt ein member mit dtor, nen string. dann hat die basisklasse
    wohl nen dtor, der aufgerufen werden muss.
    und das passiert auch ganz leicht:

    class Vogel{//Vogel muss abstrakt sein
       string name;
    public:
       Vogel(string _name):
       name(_name){
       }
       virtual ~Vogel(){
       }
       string const& getName(){
          return name;
       }
       virtual void flieg()=0;
    };
    class Singvogel{
    ...
       virtual void flieg=0;
       void flieg(){//biete standard-impl an
          cout<<"Flatter flatter"<<endl;
       }
    };
    class Amsel{
    ...
       virtual void flieg(){
          Singvogel:flieg();//nehme standard-impl an, ist bewußte entscheidung und nicht ein versehen
       }
    };
    

    soweit ist doch alles ok. ich erzwinge, daß jeder vogel einen gültigen namen hat. vogel ist abstrakt. aber jetzt kömmts: der chef kommt auf die schnapsidee, daß pinguine auch vögel seien und besteht darauf!
    also weg mit flieg()! zwischen Vogel und SIngvogel wird schnell ne klasse FliegeVogel reingefummelt, die flieg() trägt. Vögel selbst könen erstmal gar nix gemeinsames, außer
    in gemeinamen listen verwaltet werden. VOGEL MUSS ABER ABSTRAKT SEIN. was tun?

    Wie wahr, wie wahr. Aber was gibt es für Alternativen? Ein Unendlichkeit und einen Tag darauf verwenden die "prefekte" Wrapper lib zu coden und an jeden Unwahrscheinlichkeit gedacht zu haben um dann fest zustellen, dass man der einzige ist der seinen Code noch verstehen kann und dann in ein kleines Problem läuft, an das man nicht beim designen nicht gedacht hatte, und dann Stunden darauf verwendet eine Elegante Lösung zu finden. Dann stellt man fest, dass die Lösung die von der Sprache vorgeschlagen ist unelegant ist und versucht mit Preprocessor instruction der Sprache seinen eigenen Syntax aufzubrummen. Und wenn endlich mit dem Design fertig ist ist man reif für die Rente.

    nein, das sollten nur die wenigsten machen. der präprozessor ist eh nur, um erfahrungen zu sammeln und es muss mal ein voller compiler werden.
    aber sagte ich, dass man zuerst ne zeit lang mit konsole üben muss, damit man später perfekte wraper baut? nee, darum gehts nicht. es geht darum, daß man nicht trennen kann, zwischen totaler scheiße, was alles um die gui betrifft und totaler eleganz, was sein eigenes modell betrifft. man hat den werkzeugkasten noch nicht voll genug, daß man zu den meisten problemchen auch ein paar lösungen hätte. man guckt bei der guzi ab, wie die es lösen. prompt hat man lauter klassen mit default-konstruktor (obwohl ein socket, der nicht connected ist, schwachfug ist), lauter delete this (ja, manche windows löschen sich magisch alleine beim schließen) und weitere 1000 verbrechen kannste selber schnell finden. leider alles sachen, die für den nube nicht offensichtlich schlecht sind, sodaß er sich sowas durchaus erstmal angewöhnt. und solche angewohnheiten werden auf seiner weiteren suche nach lösunen natürlich alle seine bewertungen verbiegen. ein teufelkreis, aus dem er nicht so leicht rauskommt. es wird jahre vergeuden.

    Gutes Design ist etwas wertvolles aber vergiss nicht ein Program ist dazu da zu laufen und nicht um gut designed zu sein.

    ...sagt der buchhalter zum mathematiker.



  • wer sagt, daß er "in einem interface" sinn machen muß? vestehst du "interface" so, wie
    die java-leute?

    Ich habe nie in Java geproged also kann ich das nicht sagen, aber mit einer pur virtualen Methode sagst du ja, dass es sie geben muss und, dass zu faul zum implementieren bist oder sie aus irgend einem Grund nicht implementieren kann (wobei letzteres oft eine Ausrede ist).

    in c++ macht er dann sinn, wenn man eine klasse abstrakt machen will (und das ist ne
    inhaltliche entscheidung), aber keine andere methode reinstopfen will (wieder inhaltlich).

    Ich proge zwar noch nicht so lange mit pure virtuelen Methoden aber mir ist noch kein Fall begegnet wo eine Klasse abstrakt sein muss wenn es keinen geeignete Methode gibt. Ein leeres/nichstuendes Object ist nutzlos, aber wieso sollte man verbieten was nutzlos ist solange es nicht falsch ist?

    Unter einem Interface verstehe ich sowas:

    class A{
    public:
      virtual void foo()=0;
      virtual void foo2(int)=0;
      virtual char foo3()=0;
      virtual void foo4(short)=0;
      virtual ~A(){}
    };
    

    dann geb ich der basisklasse halt ein member mit dtor, nen string. dann hat die basisklasse
    wohl nen dtor, der aufgerufen werden muss.

    In dem Fall hat die Basisklasse ja einen Dtor der aufgerufen werden kann und wird 😉 , dass der User ihn nicht expicit definiert hat tut nichts zur Sache, dass es ihn gibt.

    aber sagte ich, dass man zuerst ne zeit lang mit konsole üben muss, damit man später perfekte wraper baut? nee, darum gehts nicht. es geht darum, daß man nicht trennen kann, zwischen totaler scheiße, was alles um die gui betrifft und totaler eleganz, was sein eigenes modell betrifft.

    Naja ich hab zwar sehr schnell mit der WinAPI angefangen und ich kann eigentlich nicht sagen, dass es mir geschadet hätte. Seitdem verwende ich static_cast/reinterprete_cast anstat von C casts. Denn sowas:

    int a=(++(*(int*)GetWindowLong(hwnd,GWL_USERDATA)));
    

    Ist einfach nur grausam.

    Da ist sowas schon besser

    int*b=reinterpret_cast<int*>(GetWindowLong(hwnd,GWL_USERDATA));
    *b+=1;
    int a=*b;
    

    Allein durch die Länge der Wörter reinterpret_cast und static_cast kommt man gar nicht erst auf die Idee das alles in eine Zeile zu stopfen.



  • Irgendwer schrieb:

    Ich proge zwar noch nicht so lange mit pure virtuelen Methoden aber mir ist noch kein Fall begegnet wo eine Klasse abstrakt sein muss wenn es keinen geeignete Methode gibt.

    deswegen das Vogel-Beispiel.

    Ein leeres/nichstuendes Object ist nutzlos, aber wieso sollte man verbieten was nutzlos ist solange es nicht falsch ist?

    hilfe! um eigene denkfehler compilerfindbar zu machen! deswegen verbiete ich immer jeden copy-ctor und zuweisungsop und mache sie erst auf, wenn ich ne echte inhaltliche berechtigung sehe, wenn ich sehe, daß kopieren von dem kram nutzbringend ist.

    und Vogel-objekte sind verboten, weil es kein objekt von typ Vogel geben darf. weil das sicher ein programmierfehler wäre. wenn ich ne klasse von programmierfehlern compilerfindbar machen kann, dirch ein läppisches "=0" an der richtigen stelle, dann soll ich das tun, oder?
    oder eher in meiner welt: Vogel ist von der bedeutung her abstrakt, dann soll die klasse auch abstrakt sein.

    dann geb ich der basisklasse halt ein member mit dtor, nen string. dann hat die basisklasse
    wohl nen dtor, der aufgerufen werden muss.

    In dem Fall hat die Basisklasse ja einen Dtor der aufgerufen werden kann und wird 😉 , dass der User ihn nicht expicit definiert hat tut nichts zur Sache, dass es ihn gibt.

    nee, falsch ausgedrückt.
    dann muss die basisklasse nen dtor haben, der aufgrufen werden muss, wenigstens um das member zu löschen. indem ich nen dtor pur virtuell deklariere wird der automatische nicht mehr gebaut, sondern es wird erwartet, daß ich einen baue (in ner anderen übersetzungseinheit). wenn ich das ncht mache, gibts nen linkerfehler, weil ich diesen pur virtuellen dtor nicht implementiert habe.



  • Irgendwer schrieb:

    int*b=reinterpret_cast<int*>(GetWindowLong(hwnd,GWL_USERDATA));
    *b+=1;
    int a=*b;
    

    jo, ist die richtige richtung. natürlich muss zuerst ein wrapper her.

    inline LONG myGetWindowLong(HWND hWnd,int nIndex){
       LONG r=GetWindowLong(hWnd,nIndex);
       if(!r) throw WindowsException(GetLastError);
       return r;
    }
    

    das gewöhne man sich einfach für ALLE winapi-aufrufe an, und man muß im code nie mehr auf fehler prüfen.
    aber das müßt ihr natürlich nicht, ihr könnt auch per hand gegen 0 testen, aber es zu vergessen wäre nicht extrem nett.

    die zeile

    int*b=reinterpret_cast<int*>(GetWindowLong(hwnd,GWL_USERDATA));
    

    darf zur not auch zerhackt werden, geschmackssache.
    aber

    *b+=1;
    

    war übertrieben. das ist nicht lesbarer oder in irgend einer weise besser als

    ++*b;
    

    der leser deines codes hat c++ zu kennen. zu stark verhätscheln bringt auch nix.



  • das gewöhne man sich einfach für ALLE winapi-aufrufe an, und man muß im code nie mehr auf fehler prüfen.
    aber das müßt ihr natürlich nicht, ihr könnt auch per hand gegen 0 testen, aber es zu vergessen wäre nicht extrem nett.

    Kaum zu glauben, aber MS hat es für .Net mal wirklich geschafft, mit Exceptions zu arbeiten. 😮 😃



  • Hmm, ich hab dauernd an irgendwelche Spezialmethoden gedacht, dass hier mit Methode auch ein Destruktor gemeint sein kann...

    Ist übrigens interessant was manche Leute hier alles so gedichtet haben 🙄

    MfG SideWinder



  • Ja, weil Volkard meiner Meinung nach rumgelabert hat, nach dem Motto "Ihr wisst eh nichts!". Da haben wir wie die dummen rumgeraten... Und es ist mir egal wieviel Posts er inne hat. Sooo doof sind wir nun auch wieder nicht, oder?



  • Ich hab mehr Postings als er - hilft mir auch nicht viel, also was hat das bitte mit Postings zu tun?

    Und /me findet er hat noch viel zu lernen und kann ruhig mal der Dumme sein 😃

    MfG SideWinder



  • Volkard ist aber nicht der dumme, vor allem weil er verdammt viel praxiserfahrung
    hat, was viele hier nicht haben, jedenfalls nicht in diesem Maße.



  • SirLant schrieb:

    Volkard ist aber nicht der dumme, vor allem weil er verdammt viel praxiserfahrung
    hat, was viele hier nicht haben, jedenfalls nicht in diesem Maße.

    Das stimmt, Theorie vergisst man in null Komma nix, wenn man keine fachgerechte Praxisaufgabe zum Thema hatte.



  • Artchi schrieb:

    Ja, weil Volkard meiner Meinung nach rumgelabert hat, nach dem Motto "Ihr wisst eh nichts!"...

    Ihm geht es bestimmt nicht darum zu zeigen, dass wir nichts koennen und er mehr
    Ahnung hat.

    1.) Hat er verdammt viel Ahnung und das weiss er
    2.) Unterstellt er niemandem, dass er "eh nichts weiss". Er hat, imho, eine
    provokative Art und Weise sich auszudruecken, was aber wohl niemandem schadet,
    denn in gewisser Weise fordert dass von jemandem sich etwas mehr Gedanken ueber
    etwas gesagtes zu machen.

    Nehmt nicht immer alles persoenlich, niemand will euch was und ganz bestimmt
    will hier niemand jemanden als 'schlechter' abtun.

    Artchi schrieb:

    ...
    Da haben wir wie die dummen rumgeraten... Und es ist mir egal wieviel Posts er inne hat. Sooo doof sind wir nun auch wieder nicht, oder?

    Warum raten? Ich habe die Frage direkt erstmal in google eingetippt und mich
    durch die Ergebnisse gearbeitet und nebenbei auch noch meine Buecher ueber C++
    ausgepackt und nachgeschaut.

    Und _nein_, wir sind nicht 'sooo' doof und das hat auch niemand hier behauptet.

    Ich verstehe nicht, warum viele sich mit volkard erstmal anlegen muessen, bevor
    sie etwas hinnehmen. Man kann auch auf normale Art und Weise nach dem 'Warum'
    fragen, da muss man nicht gleich mit boesen Smilies etc. arbeiten, imho.

    mfg
    v R

    PS: Und ganz nebenbei, wissen wir jetzt welche pur virtuelle Memberfunktion
    implementiert werden muss, hats also doch en Lerneffekt mit sich gebracht?!



  • nee, falsch ausgedrückt.
    dann muss die basisklasse nen dtor haben, der aufgrufen werden muss, wenigstens um das member zu löschen. indem ich nen dtor pur virtuell deklariere wird der automatische nicht mehr gebaut, sondern es wird erwartet, daß ich einen baue (in ner anderen übersetzungseinheit). wenn ich das ncht mache, gibts nen linkerfehler, weil ich diesen pur virtuellen dtor nicht implementiert habe.

    Ich habe den Compiler zwar jetzt nicht zur Hand aber wenn ich mich recht errinnere dann macht der für jede Klasse automatisch ein Dtor mit inline Linkage. Wenn du jetzt in einem Module den Dtor jetzt aber definierst markiert er ihn extra und der Linker schmeisst später alle inline Versionen raus, wenn du jetzt keine Dtor extra definiert hast dann schmeist er alle inline Versionen raus bis auf eine mit der er dann linkt.

    *b+=1;
    

    war übertrieben. das ist nicht lesbarer oder in irgend einer weise besser als

    Style frage, bei solchen kleinen Zeilen sagt mein Gefühl mir, dass da ein = reingehört, und bei ++*a; läuft man auch immer Gefahr zu glauben, dass es das gleiche ist wie *a++;. Und das sind schwer zu findende Fehler (wenn man nicht darauf achtet).



  • Irgendwer schrieb:

    *b+=1;
    

    war übertrieben. das ist nicht lesbarer oder in irgend einer weise besser als

    Style frage, bei solchen kleinen Zeilen sagt mein Gefühl mir, dass da ein = reingehört, und bei ++*a; läuft man auch immer Gefahr zu glauben, dass es das gleiche ist wie *a++;. Und das sind schwer zu findende Fehler (wenn man nicht darauf achtet).

    Stroustroup sagt in die c++-programmiersprache mehrfach man soll nur diese Mittel
    einsetzen die man sicher beherrscht und nicht um "cool zu sein" irgendwelche
    tricksereien oder sonstiges einzusetzen. Und ich würde sagen, dass dies bei diesem
    Beispiel auf jeden Fall zutrifft, wer sich unsicher ist, sollte Irgendwer's Methode
    verwenden und wer den Unterschied kennt, der soll Volkard's Version verwenden.



  • Irgendwer schrieb:

    Style frage, bei solchen kleinen Zeilen sagt mein Gefühl mir, dass da ein = reingehört, und bei ++*a; läuft man auch immer Gefahr zu glauben, dass es das gleiche ist wie *a++;. Und das sind schwer zu findende Fehler (wenn man nicht darauf achtet).

    aber der a++ kommt in freier wildbahn eigentlich nur noch bei sachen wie

    for(waskomplizeiertes)
      if(...)
         tuwas(*readpos++);
    //*readpos++ zusammen ist ein idiom, was soviel wie (sei readpos mal 
    //ein stream) readpos.get() sagt.
    

    vor. der feststehende begriff mit dem *bla++ wird da aber gelesen, nicht mehr überlegt, was das tut.
    steht ++ alleine da, ist ja ++a oder a++ von der wirkung her gleich. man bevorzugt inzwischen ++a. und zwar ganz heftig. keiner schreibt mehr for(int i=0;i<10;i++)! nein, es ist jetzt for(int i=0;i!=10;++i). != und ++i, weil das auf selbstgebauten iteratoren manchmal schneller, nie lahmer und vor allem ohne jedesmal drüber nachzudenken geht. denken ist dof, deshalb macht man es auch auch bei int so.
    das hat zur folge, daß i++ fast ausgestorben ist. nach meiner persönlichen regel eh, die besagt, daß man i++ nur benutzen sollte, wenn man mir vorher nen handschriftlichen antrag gefaxt hat (und ich habe keine faxnummer).

    vor diesem hintergrund kann keine verwechslung mehr zwischen ++*a und *a++ vorkommen, denn *a++ steht gar nicht zur diskussion.
    übrigens ist *a++ bei mir schon sehr unerwünscht, weil ich selber früher immer (*a)++ und *(a++) nicht auseinanderhalten konnte. das hate mir auch schon gereicht, lieber *++a als *a++ zu schreiben. 😃

    das i+=1 hinegen ist viel seltener anzutreffenm als das ++i. deswegen würde ich das i+=1 ganz ablehnen. das i=i+1 jedoch ist wieder häufig. (naja, nicht gerade mit der 1 dort, aber die struktur ist oft zu sehen).
    also würde ich, wenn ++*a zu mißverständlich ist, nach *a=*a+1 ausweichen.

    unwichtiges detail? für mich nicht, ich kann an so fragen stundenlang brüten. muß ja auch sein, damit ich nicht jedesmal auf neue überlegen muß, bzw. damit ich wenn was ähnliches wieder vorkommt, mit dem überlegen frühzeitig auf durchdachten grund stoße.



  • SirLant schrieb:

    Stroustroup sagt in die c++-programmiersprache mehrfach man soll nur diese Mittel einsetzen die man sicher beherrscht und nicht um "cool zu sein" irgendwelche tricksereien oder sonstiges einzusetzen.

    das erinnert mich an ne diskussion, wo ein paar nubes schrecklichen code propagierten, den ich neben anderen anmeckerte. deren antwort war "wer das nicht versteht, kann eben kein c++". naja, vermutlich sind sie nubes geblieben.
    zur "einfachheit" meine ich, daß man so coden soll, daß auch schwächere arbeitskollegen den code gut lesen können. das heißt natürlich dringenden verzicht von dicken fünffach geschachtelten (aber eigentlich ganz einfachen) schleifen. auch mal nen kommentar setzen, wenn es gar nicht anders geht. aber ich halte auch ne untergrenze für sinnvoll, bis wohin man gehen darf. und bei *a=*a+1 ist sie imho unterschritten. das klingt wie

    ++i; //die variable namens i wird um eins erhöht.
    

    das kleine einmaleins muß man verlangen können (es ist keien schande und völlig normal, wenn der kollege erstmal läner für sowas braucht, aber angewöhnen muß er sich's doch irgendwann).



  • das i+=1 hinegen ist viel seltener anzutreffenm als das ++i.

    Dafür gibt es meines erachten nach 2 Gründe:
    1.Man muss weniger tippen ; um zweimal + zu drücken braucht man die Hand nicht auf eine andere Taste zu bewegen. Bei +=1 muss man halt 3 verschiedene Tasten drücken.
    2.Bei überladenen Operatoren kann ++ schneller sein als +=1 da es für die 1 optimiert werden kann was bei += nicht der Fall ist. Bei nicht optimierenden Compilern ist dies sogar der Fall für build-in types (zumindest unter x86).

    keiner schreibt mehr for(int i=0;i<10;i++)!

    So optimistisch wäre ich nicht.

    nein, es ist jetzt for(int i=0;i!=10;++i). != und ++i, weil das auf selbstgebauten iteratoren manchmal schneller, nie lahmer und vor allem ohne jedesmal drüber nachzudenken geht. denken ist dof, deshalb macht man es auch auch bei int so.

    Eigentlich Schade. Bei beinahe allen Operatoren schreibt man wer und dann was (a= a<< a|= a(...) a-> a. ...) nur ++a muss aus der Reihe tanzen. *a zähle ich nicht hinzu da ich das * nicht unter Was sondern unter wer einordne da es ja dafür sorgt, dass das Wer ein anderes Objekt ist. Aus diesem Grund hasse ich auch *a++ da hier das * nicht das Wer beeinflusst sondern das Reslutat von a++.

    das i=i+1 jedoch ist wieder häufig.

    Find ich aber nicht so schön wegen der Wiederholung von i.



  • Irgendwer schrieb:

    Dafür gibt es meines erachten nach 2 Gründe...

    einen hab ich auch noch: +=1 liest man als "PLUS GLEICH L", denn "PLUS GLEICH EINS" kann es ja nicht sein, weil man da ja ++ genommen hätte. und falls man ne schriftart eingestellt hat, die EIND und L gut unerscheidet, bleibt man beim lesen von +=1 trotzdem immer hängen, weil das gar nicht da stehen kann.
    so geht es mir wenigstens.

    Eigentlich Schade. Bei beinahe allen Operatoren schreibt man wer und dann was (a= a<< a|= a(...) a-> a. ...) nur ++a muss aus der Reihe tanzen.

    jo, eigentlich schade. und ich würde auch gerne haben, daß zuweisungen immer void zurückgeben, damit keiner erst auf die idee kommt, "a=b=a^=b" zu schreiben (was bewirkt dieser ausdruck, wenn a und b ints sind?). und nur den einen inkrementoperatr, der wie +=1 wirkt, aber als a++ geschrieben, nicht als ++a.

    *a zähle ich nicht hinzu da ich das * nicht unter Was sondern unter wer einordne da es ja dafür sorgt, dass das Wer ein anderes Objekt ist.

    dem nachgucken, wohin ein zeiger zeit, hätte man vielleicht besser ein schlüsselwort mit klammern verpaßt.

    das i=i+1 jedoch ist wieder häufig.

    Find ich aber nicht so schön wegen der Wiederholung von i.

    was ist mit ner referenz?

    long winData=myGetWindowLong(hwnd,GWL_USERDATA);
    int *ptrB=reinterpret_cast<int*>(winData);
    int& refB=*ptrB;
    ++b;
    int a=b;
    

Anmelden zum Antworten