Newsgroup: it.comp.lang.c++
Titolo: un dubbio



se si, xa.numero varrà 5 ?
Esatto... l'operatore di assegnazione di A "vedra'"
solamente la parte A di B e ne copiera' il contenuto.
HTH
Andrea
--
Andrea Griffini, Programmer
http://www.netservers.com/~agriff

};
altrimenti non puoi assegnare 5 a xb.numero .
ciao

se si, xa.numero varrà 5 ?
si, ma non puoi fare il contrario, ovvero xb=xa
Anto
--
Antonio Cuni, 18 anni, studente
Brainbench Certification: 
Master C++: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
http://www.brainbench.com/transcript.jsp?pid=1301688




Angelo
Sě ma se le classi non sono cosě semplici č impensabile fare:
var1.numero1 = var2.numero1;
var1.numero2 = var2.numero2;
...
var1.numero_n = var2.numero_n;
Ciao
Marco Barisione (ICQ 84277092)

...e se devi aggiungere un campo qualche mese dopo, ti tocca andare a
cercare tutti gli assegnamenti in giro per il codice. Mah...
Ciao,
Nicola

 ha scritto nel messaggio
news:3AA4A3FE...@divalsim.it...


 ha scritto nel messaggio
news:3AA4A3FE...@divalsim.it...

No se ai un metodo che fa la copia.
Per esempio io ho fatto un programmini GPL che lo puoi scaricare da
sourceforge, e si chiama Visual Data Builder con il quale puoi fare tutto in
automatico. Tu scrivi solo il nome delle variabili e poi gli dici di che
tipo sono e lui ti prepara la clarre per gestirla con salva e richiama che
controllano la versione. Cosi' puoi aggiungere tutti i campi che vuoi e non
ci sono problemi.
Poi chiaramente le opinioni sono le piu' disparate.
Ciao Angelo

Per l'appunto l'operatore di assegnamento della classe. Non ho capito
allora il tuo commento precedente.
Ciao,
Nicola




 ha scritto nel messaggio
news:3AA4DFA5...@divalsim.it...

Scusa prima cosa ai visitato il progetto che ti ho detto?
quello risponde al fatto di estendere l'oggetto con nuovi record.
Secondo il fatto dell'assegnazione, se io posseggo un metodo per
l'assegnazione le modifiche che debbo fare sono solo all'interno del metodo,
fuori non debbo fare nulla.
O forse ho inteso male quello che volevi dire nel tuo replay?
Ciao Angelo


Ma nella prima risposta avevo scritto :
data 04/03/2001
Secondo me no perce' xa != xb xa == classe A e xb == classe B
si puo' fare
A xa1,xa2;
B xb1,xb2;
xa1 = xa2;    // opportuno metodo di A& operetor=(A& _altro){numero =
_altro.numero; return *this;};
xb1 = xb2;   // opportuno metodo di B& operator=(B& _altro) {nome =
_altro.nome; numero= _altro.numero; return *this;};
quello che intendo per metodo e' il metodo che si utilizza nella funzione
per eseguire qualcosa
per es
class A {
    public:
        A();
    ~A();
    .
    .
    .
    A& operator=(A& _altro);    //metodo (inteso come metodo = sistema per
ottenere il risultato)
    .
    .
    //ecc
};
//Svolgimento del metodo
A& A:operator=(A& _altro)
{
    numero = _altro.numero;
    testo = _altro.testo;
    //ecc ecc
    return *this;
}
ecco cosa volevo dire, e come nell'esempio sopra riportato faccio
esattamente quello che tu dici.
Ciao Angelo

 _altro.nome; numero= _altro.numero; return *this;};
Questo e' ancora meglio se implementato come:


 _altro.nome; numero= _altro.numero; return *this;};
Questo e' ancora meglio se implementato come:
B & B::operator = (constB& _altro) {
  static_cast<A &>(*this) = _altro;  // copia la "parte" corrispondente
ad A
  nome = _altro.nome;
  return *this;
}
In questo modo puoi modificare A indipendentemente senza "rompere"
codice di B.
In ogni caso, date le dichiarazioni qui sopra puoi anche fare:
xa1 = xb1;  // ad xa1 assegno la "parte" A di xb1
Siamo tutti d'accordo? Credo che sia Marco che io avessimo capito che
secondo te era sempre meglio fare sempre l'assegnamento membro a membro
piuttosto che in un colpo solo, ma mi pare di capire ora che non la
pensi cosi'.
Ciao,
Nicola

 Nicola
Quello che volevo sottolineare io e' che un estemporaneo xa = xb lascia
molto perplessi senza la dichiarazione dei metodi all'interno delle classi,
anche se cio' funziona e' comunque mancanza di chiarezza. Mentre come ho
prospettato io o meglio come ai fatto tu introducendo il casting
l'operazione e' chiara, esiste un metodo che spiega cosa stiamo facendo, ed
e' senza dubbio migliore per il futuro perche' toglie ogni dubbio che ti
puo' sorgere fra 10 anni.
Ciao Angelo

 puo' sorgere fra 10 anni.
In parte e' vero, anche se si suppone che un programmatore C++ sappia
che l'operatore di assegnamento e' definito automaticamente se non
dichiarato esplicitamente. Tutt'al piu' e' legittimato il dubbio che la
sua assenza sia una mancanza e non un'intenzione. Penso che se in una
classe non vengono dichiarati/definiti esplicitamente i membri generati
automaticamente, come minimo bisognerebbe inserire un commento per
indicare che la cosa e' voluta.
Ciao,
Nicola

pensi cosi'.
Già anch'io avevo capito male. :-)



Si sono daccordo sul eventuale commento.
Ciao Angelo

}
invece di usare un cast non sarebbe meglio usare
A::operator=(_altro); ?
e poi _altro non è un nome riservato al compilatore?


 e poi _altro non č un nome riservato al compilatore?
In effetti, ma c'era nell'esempio originale...
Ciao,
Nicola