Was ist das hier?

  • Eine Plattform von Flensburger Studenten für Flensburger Studenten
  • Ein Wiki zum Sammeln von Wissen
  • Ein Forum zum Austausch
  • Eine Wissensdatenbank zum Informatikstudium:
    • Programmieren in C, C#, PHP, Javascript, HTML, CSS
    • Datenbanken und Abfragen mit SQL
    • 2D / 3D - Gestaltung
    • Mathe, Physik, Gerätetechnik, RoBs
    • Audio- / Videotechnik
    • ...und vieles mehr

Anmelden

Warum registrieren?

Weil besser als gut!

 

Const (C++)

Dieser Artikel behandelt das Schlüsselwort const.

const Objekte

Objekte können, genau wie Variablen auch, als konstante Objekte deklariert werden, z.B.:

C++
const MeinArray a3(3);

Nun werden alle Methoden des Objekts a3 gesperrt, denn selbst wenn alle Methodenparameter als const deklariert wären, hätten die Methoden noch die Möglichkeit, mit dem this pointer schreibend auf die Attribute zuzugreifen !

const Methoden

Methoden, die auch auf const Objekte anwendbar seien sollen (nur lesend !), heißen const Methoden. Sie werden durch const hinter der Parameterliste gekennzeichnet:

C++
void check_index( int index ) const;
string getStringAt( int index ) const;

Hiermit wird der Typ des hidden Arguments geändert in "konstanter Zeiger auf konstantes Objekt", also:

C++
const klasse* const this

Für const Methoden ist damit sichergestellt, dass sie den Zustand eines Objekts nicht ändern.

Anwendung / Benutzung

Warum sind check_index und getStringAt als const deklariert (siehe Prog2 - Labor Nr. 4, S.1 unten) ?

  • der Copy Konstruktor wendet getStringAt auf das ihm als konstante Referenz übergebene Objekt array an (Der Copy Konstruktor könnte natürlich auch - weniger elegant - direkt auf feld zugreifen, ohne die getStringAt Methode zu benutzen.). Ohne die const Deklaration würde der Compiler selbst diesen lesenden Zugriff nicht zulassen.
  • check_index wird von getStringAt für dasselbe Objekt aufgerufen und muss deshalb auch für konstante Objekte ausführbar sein

Hinweis

Es ist gute Programmierpraxis, grundsätzlich alle Methoden, die nur lesend zugreifen, als const Methoden zu realisieren, da:

  • dem Entwickler einer Klasse nicht bekannt ist, ob es vielleicht einmal const Objekte geben wird
  • der Anwender einer Klasse sofort am Prototyp erkennt, ob man einer Methode 'trauen' kann, d.h. ob sie evtl. doch das Objekt ändert


Kategorie: Programmieren2
| Mehr

Zahlen & Daten

  • 1132 Seitenaufrufe
  • 1122 Tage alt
  • 7 Versionen
  • Letzte Änderung: 23.04.2009 um 09:29 Uhr

Publish