Costruttore per copia corretto

Tips di C++

Costruttore per copia corretto

Messaggioda alesslud » mar apr 11, 2006 9:10 am

#include <iostream>

class Vettore {
private:
int* elementi;
int grandezza;


//costruttore
//è necessario inserire un intero
public:
Vettore(int g): grandezza(g){
//crea i nuovi elementi

elementi = new int[grandezza];

for (int i = 0; i < grandezza; i++) {
elementi[i] = 0;
}
}

//costruttore per copia corretto
//il parametro all'interno del metodo viene passato per riferimento
//altrimenti si avrebbe una sovrascrittura degli elementi
//vedi esempio costruttore per copia errato
Vettore (const Vettore& b):grandezza(b.grandezza)
{
elementi = new int[grandezza];
//copia di ogni elemento
for (int i = 0; i < grandezza; i++) {
elementi[i] = b.elementi[i];
}
}


int getGrandezza() {
return grandezza;
}

int& Elemento(int pos) {
if (pos < grandezza && pos >=0)
return elementi[pos];
else {
std::cout << "Errore: indice fuori dai margini";
return elementi[0];
}
}
//distruttore

~Vettore(){
};

};
//eseguiamo la classe
int main() {

//dichiariamo di voler utilizzare la classe Vettore
//e passiamo il valore dichiarato nel costruttore
Vettore v(10);

v.Elemento(5) = 11;

if (v.Elemento(5) == 10)
std::cout << "Funziona!";
else {
std::cout << "Errore: indice fuori dai margini";
}

Vettore v1(2);
Vettore v2 = v1;

v1.Elemento(0) = 10;
v2.Elemento(0) = 20;

std::cout<<v1.Elemento(0);

return 0;
}
alesslud
Site Admin
 
Messaggi: 779
Iscritto il: mer nov 08, 2006 8:09 am

Costruttore per copia errato

Messaggioda alesslud » mar apr 11, 2006 9:11 am

#include <iostream>

class Vettore {
private:
int* elementi;
int grandezza;


//costruttore
//è necessario inserire un intero
public:
Vettore(int g): grandezza(g){
//crea i nuovi elementi

elementi = new int[grandezza];

for (int i = 0; i < grandezza; i++) {
elementi[i] = 0;
}
}

//manca il costruttore per riferimento


int getGrandezza() {
return grandezza;
}

int& Elemento(int pos) {
if (pos < grandezza && pos >=0)
return elementi[pos];
else {
std::cout << "Errore: indice fuori dai margini";
return elementi[0];
}
}
//distruttore

~Vettore(){
};

};
//eseguiamo la classe
int main() {

//dichiariamo di voler utilizzare la classe Vettore
//e passiamo il valore dichiarato nel costruttore
Vettore v(10);

v.Elemento(5) = 11;

if (v.Elemento(5) == 10)
std::cout << "Funziona!";
else {
std::cout << "Errore: indice fuori dai margini";
}

Vettore v1(2);
Vettore v2 = v1;

v1.Elemento(0) = 10;
v2.Elemento(0) = 20;

std::cout<<v1.Elemento(0);

return 0;
}
alesslud
Site Admin
 
Messaggi: 779
Iscritto il: mer nov 08, 2006 8:09 am


Torna a C++

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron