Lektion 64:Die InitialisiererlisteDie Klasse Set soll einen Vector verwenden, um die Daten zu speichern. Wie die Klasse Vector soll sie zunächst keine Template-Klasse sein und noch nicht in einer eigenen Datei stehen. Im Wesentlichen wird sie so aufgebaut sein, wie die Klasse StackAsVector aus früheren Lektionen. Ein erster Ansatz der Klasse beginnt so:
Und schon zeigt sich die erste Fehlermeldung: ==> 'Vector<double>' : no appropriate default constructor available Ein Default-Konstruktor ist ein Konstruktor, der keine Argumente braucht. Die Klasse Vector hat keinen solchen Konstruktor und deshalb kann der Compiler keinen Code automatisch erzeugen, der das Attribut m_data konstruiert. Der Versuch mit
kann nicht funktionieren. In dieser Methode ist m_data eine lokale Variable. Das Attribut m_data wird hiervon nicht betroffen. Außerdem muß der Compiler dafür sorgen, daß das Attribut m_data bereits konstruiert ist, bevor der Code des Konstruktors von Set ausgeführt wird. Es gibt also keine Möglichkeit, innerhalb der geschweiften Klammern etwas anzugeben, das den Konstruktor des Attributs m_data aufrufen würde. Also muß ein neues Sprachmittel eingeführt werden. Die Konstruktoren der Attribute einer Klasse können vom Konstruktor aufgerufen werden, indem man noch vor den geschweiften Klammern des Konstruktors eine Initialisiererliste angibt.
Es wäre auch möglich, die Initialisierung des Attributes m_size in die Initialisiererliste zu schreiben.
Diese Variante ist aber nicht vorzuziehen, denn Initialisiererlisten sind unübersichtlich und tückisch. Verwenden Sie sie nicht für eingebaute Typen wie int oder float. Falls Ihnen Fehler im Text auffallen oder Sie Verbesserungsvorschläge haben, dann schicken Sie mir bitte eine Mail. Ich werde mich dann sofort darum kümmern. [aktuelle Version] [inhalt] [index] [Fehlerkorrektur, Verbesserungsvorschlag] © Volkard Henkel <volkard@normannia.de>, last update: 08/25/00 |