2012-07-23 28 views

risposta

14

In C++ 11 solo:

class sig 
{ 
    int p_list[4]; 
    sig() : p_list { 1, 2, 3, 4 } { } 
}; 

Pre-11 non è stato possibile inizializzare matrici diverse da quelle automatiche e statiche a perimetro blocco o quelli statici in ambito namespace.

+0

ho C++ 10. Quindi ho dovuto farlo in modo duro. Grazie per tutte le vostre risposte. –

+0

È sig(): dichiara il costruttore? Questa risposta sarebbe più utile per i principianti se corrispondesse al layout di base della domanda, così possiamo vedere come funziona il costruttore. Cos'è il '' {} 'vuoto? – GreenAsJade

+0

E perché non c'è ';' dopo l'inizializzatore? – GreenAsJade

-3
p_list[4] = {'A', 'B', 'C', 'D'}; 
7

Quindi, come posso inizializzare un array?

Utilizzando la normale sintassi di lista initialiser:

sig::sig() : p_list{1, 2, 3, 4} 
{ } 

Nota, questo funziona solo in C++ 11. Prima di ciò, è necessario utilizzare un boost::array un'inizializzazione all'interno di una funzione.

3

Se il compilatore non supporta C++ 11 inizializzazione, quindi è necessario assegnare ogni campo separatamente:

p_list[0] = A; 
p_list[1] = B; 
p_list[2] = C; 
p_list[3] = D; 
2

Se il compilatore corrente non supporta ancora C++ 11, è possibile inizializzare il contenuto vettore utilizzando algoritmi standard e funtori:

class sig 
{ 
public: 
    sig() 
    { 
     struct Functor 
     { 
      Functor() : value(0) {}; 
      int operator()() { return value++; }; 
      int value; 
     }; 
     std::generate(p_list, p_list + 4, Functor()); 
    } 

    int p_list[4]; 
}; 

frammento precedente esempio here.

Sì, è un po 'brutto (almeno, mi sembra brutto) e non fa il lavoro in fase di compilazione; ma fa il lavoro che ti serve nel costruttore.

Se è necessario un altro tipo di inizializzazione (inizializzazione con numeri pari/dispari, inizializzazione con valori casuali, inizio con valore anoter, ecc.) È sufficiente modificare il Functor, e questo è l'unico vantaggio di questo brutto approccio.

1

È possibile inizializzare i membri di matrice come questo utilizzando C++ 11 compilatore utilizzando -std = C++ 11 o = -STD gnu ++ 11 opzione

struct student { 
     private : 
       int marks[5]; 
     public : 
       char name[30]; 
       int rollno; 
       student(int arr[], const char *name, int rno):marks{arr[0], arr[1], arr[2], arr[3], arr[4]}{ 
         strcpy(this->name, name); 
         this->rollno = rno; 
       } 
       void printInfo() { 
         cout <<"Name : "<<this->name<<endl; 
         cout <<"Roll No : "<<this->rollno<<endl; 
         for(int i=0; i< 5; i++) { 
           cout <<"marks : "<<marks[i]<<endl; 
         } 
       } 
}; 
int main(int argc, char *argv[]) { 
     int arr[] = {40,50,55,60,46}; 
     //this dynamic array passing is possible in c++11 so use option -std=c++11 
     struct student s1(new int[5]{40, 50, 55, 60, 46}, "Mayur", 56); 
     //can't access the private variable 
     //cout <<"Mark1 : "<<s1.marks[0]<<endl; 
     s1.printInfo();`enter code here` 
} 
Problemi correlati