Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema ereditarietà
Forum - C/C++ - Problema ereditarietà

Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 16:13
Martedì, 12/05/2009
Ho una classe Object che espone alcuni metodi pubblici e un attributo come protected.
Stavo scrivendo una classe Array che gestisse un generico Array di oggetti.

Sarebbe:
Codice sorgente - presumibilmente C#

  1. class Array
  2. {
  3.     private:
  4.        Object **arr;
  5.        int l;
  6.     public:
  7.        Object(int);
  8.        void Add(Object *);
  9.        Object * Item(int);
  10.        ...
  11. };



Questa classe dovrebbe essere in grado di ricevere un generico oggetto object e di inserirlo nell'array.

Il mio problema è il seguente:
-se passo al metodo l'oggetto in questione, che deve obbligatoriamente ereditare da Object, solo per valore(modificando il metodo Add(Object)) quando lo faccio ritornare con la Item e ne faccio il cast perdo delle informazioni, dato che gli oggetti passati alla Add sono più ricchi di attributi di object. Quindi mi trovo con gli attributi non inizializzati

-se passo invece un puntatore, se io modifico poi l'oggetto passato modifico anche il valore salvato nell'array.

Esempio:Passaggio per indirizzo

void main()
{
    Int i = 20;
    Array arr(2);
    arr.Add(&i);
    i = 30;
    arr.Add(&i);

    //se li stampo tutti e due mi stampa lo stesso valore dato che
    //all'interno dell'array salvo solo l'indirizzo della variabile i
}

Esempio:Passaggio per valore

void main()
{
    Int i = 20;
    Array arr(2);
    arr.Add(i);//nel cast da Int a Object perdo il valore degli attributi di i
    i = 30;
    arr.Add(i);

    Int j = (Int &)*arr.Item(0);
    //se stampo il valore intero di j mitrovo -8043832843
    //cioè il solito numero di non inizializzazione
}

La classe Int eredita da Object

stavo pensando di duplicare la memoria ma non mi viene in mente nessuna funzione adatta per farlo....voi cosa suggerite?

Ultima modifica effettuata da lorenzo il 12/05/2009 alle 16:16
PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 19:48
Giovedì, 14/05/2009
Object dovrebbe implementare un metodo astratto che si occupi di clonare se stesso. Quando una classe eredita da Object essa deve implementare tale metodo.

Quando aggiungi un elemento all'array, nel metodo Add esegui una copia dell'oggetto passato come argomento e inserisci nell'array la copia.


Il mio blog: https://piero.dev
PM Quote
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Segnala al moderatore
Postato alle 23:00
Giovedì, 14/05/2009
ok grazie!
adesso funziona

PM Quote