Newsgroup: it.comp.lang.c++
Titolo: HELP costruttore classe matrice

NON VORREI SEMBRARVI MASOCHISTA, MA STO CERCANDO DI IMPARARE IL C++ ED HO
PROPRIO BISOGNO DEL VOSTRO AIUTO. NON ABBANDONATEMI, VI PREGO!!!
IL PROBLEMA NASCE DA UN ARTICOLO DEL CORSO DI C++ DELLA RIVISTA DEV. VE LO
ESPONGO:
SE VOLESSI UTILIZZARE OGGETTI DELLA CLASSE VETTORE
class vettore{
  public:
    vettore(int);
/*costruttore*/
    vettore(const vettore&);
/*costruttore di copia*/
    int get_dim();
/*restituisce la dim dell'oggetto chiamante*/
    int& operator[](int);
/*overloading dell'operatore []*/
    vettore& operator=(const vettore&);
/*overloading dell'operatore =*/
    vettore operator+(const vettore&);
/*overloading dell'operatore +*/
    vettore operator-(const vettore&);
/*overloading dell'operatore -*/
    vettore operator*(const int&);
/*prodotto di un vettore per uno scalare*/
    friend vettore operator*(const int&, const vettore&);     /*prodotto di
uno scalare per un vettore*/
    friend int operator*(const vettore&, const vettore&);     /*prodotto
scalare*/
    friend ostream& operator<<(ostream&,vettore);           /*overloading
dell'operatore <<*/
    friend void operator>>(istream&,vettore&);
/*overloading dell'operatore >>*/
    ~vettore();
/*distruttore*/
  private:
    int *v;
    int dim;
};
DOVE IL COSTRUTTORE E IL DISTRUTTORE SONO:
vettore::vettore(int dimensione){        /*costruttore*/
  dim=dimensione;
  v=new int(dim);
}
vettore::~vettore(){                            /*distruttore*/
  delete[] v;
}
PER CREARE LA CALSSE MATRICE:
class matrice{
  public:
    matrice(int,int);
    ~matrice();
  private:
    int righe, colonne;
    vettore* m;                    /* qui vorrei creare un vettore di
vettori*/
};
COME DOVREI FARE PER ALLOCARE LA MEMORIA DELLA MATRICE NELLA MEMORIA LIBERA?
matrice::matrice(int r, int c){           /*costruttore classe matrice*/
  righe=r;
  colonne=c;
  /*m=???*/                        /* RIGA INCRIMINATA*/
}
L'AUTORE DELL'ARTICOLO SOSTIENE CHE BASTI SCRIVERE AL POSTO DELLA "RIGA
INCRIMINATA":
...
...
  m=new vettore[righe](colonne);
...
...
SOSTENENDO CHE IL COMPILATORE ALLOCA LA QUANTITA' DI MEMORIA NECESSARIA PER
CONTENERE UN NUMERO DI VETTORI PARI A righe (vettore[righe] DOVREBBE ESSERE
UN VETTORE) OGNUMO DEI QUALI PUO' CONTENERE colonne OGGETTI DI TIPO int.
IL PROBLEMA E' CHE, SIA COMPILANDO CON IL BORLAND C++BUILDER 3 CHE CON IL
COMPILATORE GNU DI LINUX, OTTENGO UN ERRORE.
AL POSTO MIO COSA FARESTE?
RINGRAZIO TUTTI PER L'AIUTO PROMETTENDO UNA PARTE DELLA MICROSOFT A CHI
RISOLVERA' IL PROBLEMA :-)), CIAO.
P.S.
E PER IL DISTRUTTORE?
~matrice::matrice(int r, int c){         /*distruttore classe matrice*/
  /*???*/
}
COSA SCRIVERESTE?

 COSA SCRIVERESTE?
Lì dentro non ci scriverei nulla, ma nel *vero* distruttore, che è
  ~matrice::matrice();   // nessun argomento!
ci metteri un bel
	delete [] m;
Nel caso il citato errore di compilazione fosse proprio qualcosa come
"destructors may not have parameters" o equivalente, beh, ora sai cosa
fare. 
Max

 COSA SCRIVERESTE?
Lě dentro non ci scriverei nulla, ma nel *vero* distruttore, che č


  m=new vettore[righe](colonne);
A me pare decisamente un errore...
Ti rimando alle FAQ che ho postato giusto pochissimi
giorni fa.
Paolo
--------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
--------------------------------------------------