Go Down

Topic: brauche Hilfe class/object (Read 706 times) previous topic - next topic

postmaster-ino

Hi

Aaaahhh ... sorry, hatte nicht gesehen, daß MyClass1 und MyClass2 schon verschieden sind - hatte bei Beiden die 1 gesehen.
Ok, so wird ein Schuh daraus, ich sehe Unterschiede und kann mit Zusammenreimen anfangen!

Danke für's mit der Nase drauf stupsen ;)

MfG
anscheinend ist Es nicht erwünscht, einen Foren-internen Link als 'Homepage' einzubinden, damit JEDER nur einen Klick von combie's Liste zum Thema State-Maschine entfernt ist.
... dann eben nicht ...

Doc_Arduino

Hallo,

schönes Bsp. Tommy. Danke.
Kann ich derzeit bei mir leider nicht umsetzen. Weil das einen übelsten Rattenschwanz in meiner Lib nach sich zieht. Selbst Hilfsfunktionen werden in meiner .cpp  dann wegen const angemeckert. Das geht vom Hunderten ins Tausende. Das muss ich nochmal im Kleinen nachvollziehen, also meine Lib abspecken.

Was mir dabei gleichzeitig durch die Birne schießt ist, warum ein Objekt überhaupt const also read only machen?
Einmal initialisiert ist es doch unveränderbar. Eine Objekt Übergabe per Referenz ohne const kann doch nicht schief gehen.
Zudem die Lesbarkeit durch Tausende const extrem leidet.
Übersehe ich etwas?
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

combie

#32
Apr 28, 2019, 07:37 pm Last Edit: Apr 28, 2019, 07:38 pm by combie
Quote
Was mir dabei gleichzeitig durch die Birne schießt ist, warum ein Objekt überhaupt const also read only machen?
Einmal initialisiert ist es doch unveränderbar. Eine Objekt Übergabe per Referenz ohne const kann doch nicht schief gehen.
const verhindert versehentliche Veränderungen.

Grundregel:
Je expliziter/restriktiver man die Dinge ausformuliert, desto weniger Fehler/Dummheiten kann man damit anstellen.
Und, wie schon gesagt... dem Optimierer hilfts auch noch etwas auf die Sprünge.
> Das größte Problem, ist die Wahl der richtigen Gedanken <
Frei nach Dale Carnegie

michael_x

Quote from: tommy
Dabei ist es unerheblich, ob die Methoden etwas ändern.
? Verstehe ich jetzt nicht.
Das wird doch gerade verhindert durch const.

versuche mal

Code: [Select]
class MyClass2 {
  public:
    int getVal() const {
      val *= 2;  // das sollte nicht möglich sein
      return val;
    }
  private:
   int val = 10;  
};



Das Original - getVal() ändert nichts am this - Objekt, sollte daher als const deklariert werden. Dann kann man auch Instanzen dieser Klasse als const deklarieren, ohne dass man sich die Warnung "discards qualifiers" einfängt.

Aber du hast recht, @Doc, wenn man einmal anfängt, ordentlich alles mit const zu deklarieren, zieht das gern einen elenden Rattenschwanz nach sich, besonders und solange in verwendeten Funktionen nicht alles const ist, was const sein sollte.
Es gab mal ein Arduino, da waren nochnichtmal  PROGMEM-Zugriffe const, wenn ich mich recht erinnere.

Und bei Zeigern muss man gut zwischen einem const Zeiger und einem Zeiger auf const unterscheiden.
Das Ganze kann man gern mit "Schwer lesbar" verwechseln.




Tommy56

? Verstehe ich jetzt nicht.
Das wird doch gerade verhindert durch const.
Ich wollte damit nur ausdrücken, dass die Warnung auch kommt, wenn die Methode nichts in der Klasse ändert. Das war wahrscheinlich unglücklich formuliert.

Wenn Du tatsächlich was änderst, kommt ein Error. Es sei denn, Du hast die Variable als mutable gekennzeichnet, dann kannst Du sie auch in einem const-Objekt ändern.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Doc_Arduino

Hallo,

gut das wir darüber gesprochen haben.  ;)
Danke euch allen.
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

Go Up