Ergänzungen

explicit keyword

In C++ gibt es manchmal subtile Effekte mit unerwarteten Nebenwirkungen. Ein Beispiel ist die implizite Typumwandlung bei Funktionsaufrufen. Wenn in unserer My3Vector Klasse Konstruktor und add-operator wie in myvec.h deklariert sind, d.h.
My3Vector(double xv = 0.0, double yv = 0.0, double zv = 0.0);
My3Vector operator + (const My3Vector & xv ) const;

Dann akzeptiert C++ folgende Anweisungen:
My3Vector a(1.,1.,0.);
My3Vector d = a + 2;
cout « " d = " « d « endl;

Und gibt d = (3,1,0) aus.

Was passiert:

Meist ist dieses Verhalten unerwünscht und führt zu bizarren Fehlern. Man kann es unterbinden mit explicit keyword bei Konstruktor Deklaration:
explicit My3Vector(double xv = 0.0, double yv = 0.0, double zv = 0.0);

Dann ergibt My3Vector d = a + 2 Compiler Fehler
\bgroup\color{green}\ensuremath{\Rightarrow}\egroup explicit verwenden bei Konstruktorern mit default Argumenten.


Pointer Syntax für Objekte

Bei der Nutzung von Pointern gibt es speziellen Operator -> zum Zugriff auf Membervariablen bzw. -Funktionen:
My3Vector a(1.5, 0.7, 2.2 );
a.Length(); // Call Length method for a
My3Vector * pa = & a ; // pointer to object a
pa->Length(); // Call Length method for pa
(*pa).Length(); // Call Length method for pa via de-referencing