Brazorv
27-06-2005, 18:37
Dopo il finesettimana ripreso a studiare c++ ho fatto un nuovo capitolo e sto facendo un esercizio.
Devo implementare una classe IntegerSet che rappresenta un insieme di interi che può contenere numeri da 0 a 100. L'esercizio chiede di implementarla con un array di 101 elementi, in cui l'iesimo elemento vale 1 se i è presente nell'insieme, 0 se non è presente. Questa è la dichiarazione delle mia classe
#ifndef INTEGERSET_H
#define INTEGERSET_H
class IntegerSet{
public:
IntegerSet();
IntegerSet(int,int=-1,int=-1,int=-1,int=-1);
~IntegerSet();
int insertElement(int);
void deleteElement(int);
void setPrint() const;
bool isEqualTo(const IntegerSet &) const;
IntegerSet unionOfSet(const IntegerSet &) const;insiemi
IntegerSet intersectionOfSet(const IntegerSet &) const;
int getElements() const;
int getElement(int) const;nell'insieme 0 altrimenti
private:
int *set; // array che contiene gli elementi dell'insieme
int elements; // numero di elementi presenti nell'insieme
void initialize();
};
#endif
Devo fare 2 costruttori uno che non prende argomenti e restituisce un insieme vuoto e l'altro che prende da 1 a 5 elementi e crea un insieme che contiene gli elementi che ho passato, questi sono i costruttori che ho fatto:
IntegerSet::IntegerSet(){
initialize();
}
IntegerSet::IntegerSet(int a, int b, int c,int d,int e){
initialize();
insertElement(a);
insertElement(b);
insertElement(c);
insertElement(d);
insertElement(e);
}
IntegerSet::~IntegerSet(){
delete [] set;
}
void IntegerSet::initialize(){
set = new int[MAX_ELE];
for(int i=0; i<MAX_ELE; i++)
set[i]=0;
elements=0;
}
Prima di fare questa versione ne ho fatto un'altra che non funzionava era così:
IntegerSet::IntegerSet(){
set = new int[MAX_ELE];
for(int i=0; i<MAX_ELE; i++)
set[i]=0;
elements=0;
}
IntegerSet::IntegerSet(int a, int b, int c,int d,int e){
IntegerSet();
insertElement(a);
insertElement(b);
insertElement(c);
insertElement(d);
insertElement(e);
}
IntegerSet::~IntegerSet(){
delete [] set;
}
questa mi restituiva sempre un insieme vuoto.
i miei dubbi sono:
si può chiamare un costruttore all'interno di un altro costruttore?
posso fare in modo che la funzione initialize sia chiamata una sola volta, cioè solo quando l'oggetto viene creato?
poi l'ultimo dubbio riguarda il distruttore, mettendo
delete [] set;
sono sicuro che la memoria allocata nel costruttore venga liberata quando l'oggetto viene distrutto oppure devo fare qualcos'altro?
Scusate se il post è un pò lungo.
Devo implementare una classe IntegerSet che rappresenta un insieme di interi che può contenere numeri da 0 a 100. L'esercizio chiede di implementarla con un array di 101 elementi, in cui l'iesimo elemento vale 1 se i è presente nell'insieme, 0 se non è presente. Questa è la dichiarazione delle mia classe
#ifndef INTEGERSET_H
#define INTEGERSET_H
class IntegerSet{
public:
IntegerSet();
IntegerSet(int,int=-1,int=-1,int=-1,int=-1);
~IntegerSet();
int insertElement(int);
void deleteElement(int);
void setPrint() const;
bool isEqualTo(const IntegerSet &) const;
IntegerSet unionOfSet(const IntegerSet &) const;insiemi
IntegerSet intersectionOfSet(const IntegerSet &) const;
int getElements() const;
int getElement(int) const;nell'insieme 0 altrimenti
private:
int *set; // array che contiene gli elementi dell'insieme
int elements; // numero di elementi presenti nell'insieme
void initialize();
};
#endif
Devo fare 2 costruttori uno che non prende argomenti e restituisce un insieme vuoto e l'altro che prende da 1 a 5 elementi e crea un insieme che contiene gli elementi che ho passato, questi sono i costruttori che ho fatto:
IntegerSet::IntegerSet(){
initialize();
}
IntegerSet::IntegerSet(int a, int b, int c,int d,int e){
initialize();
insertElement(a);
insertElement(b);
insertElement(c);
insertElement(d);
insertElement(e);
}
IntegerSet::~IntegerSet(){
delete [] set;
}
void IntegerSet::initialize(){
set = new int[MAX_ELE];
for(int i=0; i<MAX_ELE; i++)
set[i]=0;
elements=0;
}
Prima di fare questa versione ne ho fatto un'altra che non funzionava era così:
IntegerSet::IntegerSet(){
set = new int[MAX_ELE];
for(int i=0; i<MAX_ELE; i++)
set[i]=0;
elements=0;
}
IntegerSet::IntegerSet(int a, int b, int c,int d,int e){
IntegerSet();
insertElement(a);
insertElement(b);
insertElement(c);
insertElement(d);
insertElement(e);
}
IntegerSet::~IntegerSet(){
delete [] set;
}
questa mi restituiva sempre un insieme vuoto.
i miei dubbi sono:
si può chiamare un costruttore all'interno di un altro costruttore?
posso fare in modo che la funzione initialize sia chiamata una sola volta, cioè solo quando l'oggetto viene creato?
poi l'ultimo dubbio riguarda il distruttore, mettendo
delete [] set;
sono sicuro che la memoria allocata nel costruttore venga liberata quando l'oggetto viene distrutto oppure devo fare qualcos'altro?
Scusate se il post è un pò lungo.