extern ¨C¨

asm

Default-Template-Parameter

In Destruktoren am besten keine Ausnahmen werfen.

Destruktoren immer virtuell definieren, damit im Zweifel der richtige aufgerufen wird (aber nicht pur virtuell).

Zuweisungsoperator und Copy-Konstruktor nicht vergessen, auf jeden Fall für Objekte mit allokierten Resourcen!

Zuweisungsoperator, Copy-Konstruktor, und Vergleichsoperatoren (==, !=, < etc.) sollten sinnvoll zusammenpassen.

Operatoren, deren Ergebnisse als lvalues dienen können (alle Zuweisungen, operator[], operator* etc.) müssen eine Referenz liefern.

Die Funktion von überladenen Operatoren sinnvoll ändern, gegensätzliche Operatoren (< und >= beispielsweise) sollten das auch bleiben. Zusammenfassende Operatoren sollten so funktionieren wie die Einzeloperatoren (also sollte ein a+=b das selbe Ergebnis liefern wie ein a = a + b).

Binäre Operationen als friend besser, da der Compiler dann beide Parameter implizit konvertieren kann (sonst nur den zweiten).

Es gibt Leute, die von Referenzen als Parameter und Rückgabewerten weitgehend abraten. Namensgebung? NULL liefern!

Soweit möglich const & statt call by value: schneller, besser optimierbar

Ableiten: Zum Überschreiben muß die exakte Signatur verwendet werden, sonst Verdecken (inkl. const)!

intern:

class A_Intern
{
 public:
   // Alles, was der Anwender sehen darf...
 private:
   // Alles, was der Benutzer nicht sehen darf...
};

öffentlich:

class A_Intern;
class A
{
 private:
    A_Intern  &intern;
 public:
    A() intern( *new A_Intern )
    ~A() { delete &intern; }
};

AnyWare@Wachtler.de