PDA

View Full Version : c++ costruttori di copia


x110
13-08-2004, 16:00
ciao sto usando le QT

ho una classe che eredita dalla classe QObject

il suo costruttore di copia di default e' privato,
come posso ridefinirne uno mio pubblico in modo che io possa copiare oggetti della mia classe?


ciao.

Black imp
18-08-2004, 03:05
che io sappia.. non puoi :(

leomagic
18-08-2004, 09:39
a quanto sappia si possono ridefinire i costruttori,addirituttra puoi fare + costruttuori,con o senza parametri e a seconda della chiamata dell'oggetto con o senza parametri il programma sa da solo qualche costrutture fare partire,i costrutturi poi devono essere tutti public e devono avere lo stesso nome della classe..

x110
18-08-2004, 10:01
si queste dovrebbero essere le regole per una classe tua,
ma per una classe ereditata con costruttore di copia privato?
beh potrei modificare la classe base, ma in questo caso l'ho montata in un cramfs volume,
quindi in sola lettura all'interno di un pda e poi sinceramente non ho voglia di farlo perche' se e' private c'e' un motivo.

leomagic
18-08-2004, 10:08
fai una ereditarietà di tipo friend no?

Black imp
18-08-2004, 11:22
ma se la funzione nella classe da ereditare è già private?

x110
19-08-2004, 11:03
che vantaggi ho con friend?

Black imp
19-08-2004, 13:08
ma poi... che cos'è una ereditarietà di tipo friend?
io conosco solo la public, protected e private

:eh:

riboulez
19-08-2004, 17:02
Originariamente inviato da Black imp
ma poi... che cos'è una ereditarietà di tipo friend?
io conosco solo la public, protected e private

:eh:

Difatti come friend si definiscono le funzioni, e nn le classi ereditarie...
ed è una funzione ke ha libero accesso hai membri privati d una classe.

Black imp
19-08-2004, 17:34
Originariamente inviato da riboulez
Difatti come friend si definiscono le funzioni, e nn le classi ereditarie...
ed è una funzione ke ha libero accesso hai membri privati d una classe.


sì è quello che so anch'io ma sopra lui ha scritto 'un'ereditarietà di tipo friend'... pensavo fosse un nuovo costrutto :rolleyes:

:p

fek
22-08-2004, 08:54
Originariamente inviato da x110
ciao sto usando le QT

ho una classe che eredita dalla classe QObject

il suo costruttore di copia di default e' privato,
come posso ridefinirne uno mio pubblico in modo che io possa copiare oggetti della mia classe?


Se il costruttore di copia della classo e' privato, ci sara' un perche' :)
Dichiarare un costruttore privato e' come un messaggio che chi programma la classe vuole dare a chi la usa ed il messaggio e' chiaro: "Questa classe non puo' essere copiata". Il perche' una classe non possa essere copiata non e' di interesse dell'utente della classe.

La risposta alla tua domanda e' quindi: non puoi e anche se potessi non devi farlo.
Quindi niente friend, che per altro e' un costrutto molto pericoloso e va usato solo se sai esattamente quello che stai facendo. E quando sai di sapere esattamente quello che stai facendo, ripensaci e domandati se non c'e' un modo di risolvere il tuo problema senza friend :)

Se per qualche motivo hai bisogno di un oggetto con semantica di copia (un oggetto che vuoi copiare) che "usa" la classe QObject puoi sempre dichiarare la tua nuova classe e fare "containment": in parole povere crei una classe copiabile che contiene un'istanza alla classe QObject. Occhio che non e' una cosa semplice da gestire e se non hai assolutamente bisogno di questo comportamento ti consiglio di evitare quest'implementazione. In genere cerca di fare le cose piu' semplici possibili.

x110
24-08-2004, 10:16
"containment"
cosa vuol dire?
e' una parola che non ho mai sentito.
io per ora ho creato una f.membro che si chiama "copia(tipo oggetto)."
naturalmente mi copia solo i dati della mia classe derivata e se aggiungo una variabile la devo inserire anche nella fnzione di copia.
che e' quello che poi volevo io.
non volevo copiare anche l'oggetto di derivazione.
ne creo uno nuovo e copio i valori in esso da un'altro oggetto sorgente.

comunque sono curioso sul containment.:)