Einfachste Möglichkeit, mehrere verwandte const-Eigenschaften in einem Konstruktor zu initialisieren?

8

Wenn mehrere const-Eigenschaften einer C ++ - Klasse von einer Zwischenberechnung abhängen, was ist der einfachste Weg, sie zu initialisieren?

Wie korrigiere ich zum Beispiel den Konstruktor für die Klasse?

%Vor%     
Victor Lyuboslavsky 20.03.2013, 22:07
quelle

8 Antworten

10

Mit C ++ 11 können Sie einfach einen delegierenden Konstruktor verwenden:

%Vor%     
Daniel Frey 20.03.2013, 22:46
quelle
5

Hier ist eine Umweglösung mit delegierenden Konstruktoren:

%Vor%     
Kerrek SB 20.03.2013 22:23
quelle
2

Sie könnten so etwas tun - nicht schön, aber sollten es tun:

%Vor%     
Tomer Arazy 20.03.2013 22:15
quelle
2

Für den Fall, dass Sie mit einem alten Compiler, der keine delegierenden Konstruktoren unterstützt, nicht weiterkommen, ist hier derselbe Ansatz für die ältere Sprachversion vorgesehen:

%Vor%     
ulidtko 20.03.2013 22:48
quelle
2

Dies wird ein bisschen funktionieren für diejenigen von uns, die es vorziehen, in ihrer Programmierung weniger fortgeschritten zu sein:

%Vor%

Das zusätzliche Element stellt einen unnötigen Overhead dar, der für die vorliegende Aufgabe von Bedeutung sein kann oder auch nicht. OTOH, der Code ist einfach.

Denken Sie daran, iamStupid vor a und b zu deklarieren! (siehe Kommentare)

    
ulidtko 20.03.2013 22:19
quelle
1

Führen Sie eine Zwischenklasse ein, die die Berechnung durchführt:

%Vor%     
tpdi 20.03.2013 22:13
quelle
1

Const ist ein Vertrag zwischen dem Benutzer und dem Implementierer einer Klasse. Es gibt an, dass der Klassenbenutzer die Elementvariablen nicht ändern sollte, wodurch ein unveränderliches Objektdesign bereitgestellt wird. Es ist in Ordnung, wenn ein Konstruktor diesen Zustand anderweitig initialisiert. Es ist jedoch besser, diese hinter einem privaten Zugriffsqualifizierer zu verbergen und Zugriffsberechtigungen bereitzustellen, die schreibgeschützt sind. Die korrekte Methode, um const-ness vorübergehend zu entfernen, ist die Verwendung von const_cast & lt; & gt;.

%Vor%

};

    
jbruni 20.03.2013 22:26
quelle
-1

Sie könnten a und b private setzen und Gettern den Zugriff auf ihre Werte außerhalb der Klasse ermöglichen.

%Vor%

Oder Sie könnten einfach Unterobjektinitialisierer verwenden und die Zufallszahl irgendwie zwischenspeichern. Wenn Sie die Optimierung aktivieren, wird möglicherweise sogar die temporäre Variable im generierten Programmtext entfernt.

%Vor%

Denken Sie daran, dass die Konstruktion von Subobjekten in der Reihenfolge erfolgt, in der Member in der Klasse deklariert sind und dass die Reihenfolge der Unterobjekte in der Initialisierungsliste wird ignoriert.

Oder Sie können faul sein und nur die ursprüngliche Zufallszahl speichern und a, b bei Bedarf generieren.

    
Wug 20.03.2013 22:26
quelle

Tags und Links