impossibile dichiarare la classe senza inizializzazione?

impossibile dichiarare la classe senza inizializzazione?


Per oggetti dati standard come int, è possibile eseguire le seguenti operazioni


    int number;
number = 0;

Fondamentalmente, puoi dichiarare il numero prima di inizializzarlo, utile se inizializzi all'interno di varie istruzioni if ​​e non vuoi che il numero esca dall'ambito.


È possibile fare qualcosa di simile con le classi personalizzate?


Ho una classe chiamata mem_array con il costruttore del form


    mem_array(int,int,std::string);

Vorrei fare quanto segue


      mem_array myData;
if(x==0) myData(1,1,"up");
if(x==1) myData(0,0,"down");

fondamentalmente, quindi posso usare myData al di fuori dell'ambito delle istruzioni if. Si può fare qualcosa del genere?


Risposte:


La tua prima riga ti darà un errore poiché il costruttore non ha valori predefiniti e un costruttore senza parametri non esiste.


Basta usare un puntatore (o meglio ancora un puntatore intelligente, così non devi preoccuparti di eliminare l'oggetto). Ma assicurati di controllare in seguito che x fosse 0 o 1, ovvero controlla che myData sia stato costruito.


mem_array* myData=0;
if(x==0) myData=new mem_array(1,1,"up");
if(x==1) myData=new mem_array(0,0,"down);
assert(myData!=0);

Alcune risposte al codice


    int number;
number = 0;
    mem_array(int,int,std::string);

mem_array myData;
if(x==0) myData(1,1,"up");
if(x==1) myData(0,0,"down");
mem_array* myData=0;
if(x==0) myData=new mem_array(1,1,"up");
if(x==1) myData=new mem_array(0,0,"down);
assert(myData!=0);
unique_ptr<mem_array>
myData;
switch (x) { case 0:
myData.reset(new mem_array(1, 1, "up"));
break;
case 1:
myData.reset(new mem_array(0, 0, "down"));;
break;
}
int number;
number = 0;
mem_array myData;
if (x == 0) myData = mem_array(1, 1, "up");
if (x == 1) myData = mem_array(0, 0, "down");
class mem_array {    ...  public:   mem_array&
operator= (const mem_array&
cma);
{
/* Copy the information from cma to *this. */
/* Return a reference to this object. */
return *this;
} };
mem_array myData = (x==1) ? myData(1,1,"up") : myData(0,0,"down");
boost::optional<mem_array>
myData;
// Doesn't hold a mem_array yet. if(x==0) myData = mem_array(1,1,"up");
if(x==1) myData = mem_array(0,0,"down");