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
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