|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Aug 2004
Messaggi: 156
|
[C++] Nuovo capitolo nuovo esercizio
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 Codice:
#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
Codice:
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;
}
Codice:
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;
}
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. |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Aug 2004
Messaggi: 156
|
up
|
|
|
|
|
|
#3 |
|
Member
Iscritto dal: May 2005
Città: Genova
Messaggi: 33
|
per quel che ne so io un costruttoe dentro un costruttore si può fare. Il distruttore è corretto ma non ho capito qual'è il problema con il costruttore senza argomenti (initialize)
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Aug 2004
Messaggi: 156
|
Il problema è che se io creo un oggetto così
IntegerSet a; viene chiamato questo costruttore Codice:
IntegerSet::IntegerSet(){
set = new int[MAX_ELE];
for(int i=0; i<MAX_ELE; i++)
set[i]=0;
elements=0;
}
Invece se creo un oggetto così IntegerSet a(5,6); dovrebbe chiamare l'altro costruttore: Codice:
IntegerSet::IntegerSet(int a, int b, int c,int d,int e){
IntegerSet();
insertElement(a);
insertElement(b);
insertElement(c);
insertElement(d);
insertElement(e);
}
Spero di essermi spiegato meglio. |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: May 2005
Città: Genova
Messaggi: 33
|
ma in questa maniera non inserisci elementi c d e con valori assurdi?
|
|
|
|
|
|
#6 | |
|
Member
Iscritto dal: Aug 2004
Messaggi: 156
|
Quote:
Codice:
int IntegerSet::insertElement(int e){
if(e>=0 && e<MAX_ELE && elements<=MAX_ELE){
set[e]=1;
elements++;
return 1;
}
return -1;
}
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 17:22.



















