2017-01-13 2 views
0

Ich muss ein Array von Objekten mit nicht standardmäßigen Konstruktor erstellen. Welche Sprachfunktion sollte angewendet werden, um dies zu erreichen?So erstellen Sie ein Array von Objekten mit parametrisierten Konstruktor

Diese Codezeile lässt mich das nicht tun.

Object objects[10]{("foo", "bar")}; 
+0

Was ist ein Objekt für Sie? –

+0

@ F.bernal jedes Objekt mit einem entsprechenden Konstruktor. –

+1

Nicht mit Arrays. Verwenden Sie std :: vector –

Antwort

2

Wenn Sie nicht alle einzelnen Objekte in der Initialisierungsliste angeben möchten, ist dies mit einfachen einfachen Arrays nicht möglich.

jedoch mit einem std::vector ist es tot einfach, weil es eine constructor overload ist, die die Größe des Vektors und das Objekt alle Elemente zu initialisieren nimmt. So können Sie so etwas wie

std::vector<Object> objects(10, Object("foo", "bar")); 

tun Der oben einen Vektor mit zehn Elementen erstellen, alle Elemente zu Kopien von Object("foo", "bar") initialisiert.

+0

Alle Erklärungen, warum dies nicht funktioniert in Bezug auf Low-Level-Programmierung? –

+0

@Tracy Was meinst du mit "Low-Level-Programmierung"? Dass Sie mit einfachen Arrays arbeiten wollen? Warum? Entweder Sie passen sich an, um die Möglichkeiten zu nutzen, die Ihnen in der Sprache zur Verfügung stehen, oder Sie passen sich an, um Defizite zu beheben (wie zum Beispiel das explizite Initialisieren jedes einzelnen Elements im Array). Wie auch immer, Sie können die Sprache nicht in die gewünschte Form und Form hämmern, Sie müssen sich anpassen. Oder ändern Sie die Sprache in eine Sprache, die besser zu Ihren Bedürfnissen passt (was nur eine andere Art von Anpassung von Ihrer Seite ist). –

+0

Warum? Ich möchte all diese Dinge so gut wie möglich verstehen. Ich mag Low-Level-Programmierung. –

0

Verwenden Sie = und übergeben Sie Ihre Werte für Nicht-Standard-Ctor in Initializer-Liste. Auf diese Weise sollten Sie jeden Wert im Array definieren.

Example

int main() 
{ 
    struct A { 
     int _v; 

     A(int v) : _v(v) {} 
    }; 

    A my_a[3] = {0, 1, 2}; 

    for (auto i : my_a) 
     std::cout << i._v << ", "; 
    std::cout << "\n"; 

} 
0

Kurze Antwort gibt es keine Möglichkeit, dass mit roher Array zu tun ist. Ein alternativer Weg wäre std::vector, der diese Möglichkeit bietet.

0

So ähnlich?

#include <array> 
#include <iostream> 

struct foo { 
    int a, b; 
}; 

int main() 
{ 
    std::array<foo, 4> v= {{ {1, 2}, {2, 3}, {3, 4}, {4, 5} }}; 
    for (auto f : v) { 
     std::cout << f.a << ' ' << f.b << std::endl; 
    } 
} 
0

Sie können Vektor oder Array von Zeigern auf Ihrem Objekt verwenden.

Object* arr[6]; 
for (int i = 0; i < 6; i++) 
{ 
    arr[i] = new Object("angry dog", 6); 
} 
Verwandte Themen