2016-04-14 6 views
4

sagen, dass ich den folgenden Code haben:Konstrukteurs und Mitglied der Objektvariable, Initialisierungswerte

struct Car{ 

public: 
    Car(){} 
    Car(int w, int d){ 
     wheels = w; 
     doors = d; 
    } 
private: 
    int wheels; 
    int doors; 
}; 

int main(){ 
    Car *cars = new Car[10]; 
    cars[0] = {4, 4}; 
    cars[1] = Car(4, 4); 
} 

die Struktur Unter Berücksichtigung erlaubt keine Möglichkeit, den Wert der Räder der Einstellung und Türen andere als einen Konstruktor, was der bessere Weg wäre, dem Auto-Array Werte zuweisen? Gibt es einen Unterschied zwischen den letzten beiden Zeilen im obigen Code?

Ich arbeite derzeit an einer Hash-Tabelle-Implementierung für die Schule und die Startbasis von C++ - Code zur Verfügung gestellt hat eine Schlüssel-Wert-Paar-Klasse mit nur einer setKey-Methode und keine setValue-Methode. Also muss ich im Grunde Werte mit Aufrufen an einen Konstruktor zuweisen und bin mir nicht sicher, ob es einen Unterschied zwischen der Verwendung von {} oder Klassenname (Schlüssel, Wert) für die Zuweisung gibt.

+1

Beide Zuweisungsmethoden sind für diese Klasse identisch. Es könnte sich unterscheiden, wenn Sie den Nicht-Copy-Operator "operator =" oder einen Konstruktor "initializer_list" überladen hätten. –

Antwort

0

In diesem Fall sind beide Möglichkeiten gleich, weil schließlich der copy-assignment Operator von Car aufgerufen wird, der standardmäßig vom Compiler bereitgestellt wird.

Wenn Ihr Zweck ist es nur einige Objekte von Car und initialisieren sie mit anfänglicher Standardwert zuzuweisen, warum dann nicht std::vector in diesem Fall benutzen,

std::vector<Car> cars(10, Car(4,4)); 

Aber obige Methode Speicher zuteilen wird nicht auf Halde, aber sie könnte darüber nachdenken.

Verwandte Themen