• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Problema risolto Codice ripetitivo in classi derivate

gedamial

Utente Senior
Autore del topic
9 Giugno 2010
1.937
69
Miglior risposta
0
Salve a tutti.

Scusatemi, ma questa domanda la faccio fuori casa e ho internet solo sul cellulare, quindi vi lascio due foto che descrivono il mio problema.

PARTE 1
link expired

PARTE 2
link expired
 
Ultima modifica:
Salve a tutti.

Scusatemi, ma questa domanda la faccil fuori casa e ho internet solo sul cellulare, quindi vi lascio due foto che descrivono il mio problema.
Spero non sia una scocciatura per voi.
Grazie in anticipo!

PARTE 1
Perfavore, Entra oppure Registrati per vedere i Link!


PARTE 2
Perfavore, Entra oppure Registrati per vedere i Link!



Sent from my GT-I9301I using Tapatalk

non ha senso perché tu crei un oggetto ak47 e basta , senza passare nulla al construttore. Inoltre se ti servono solo quei quattro metodi nulla ti vieta di fare :

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Essenzialmente devi usare solo l'ereditarietà senza ridefinire i metodi della classe base.

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
 
Ultima modifica:
non ha senso perché tu crei un oggetto ak47 e basta , senza passare nulla al construttore.
Non ho capito che intendi lol

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Per "nuovi metodi PIU i precedenti" intendi dire che COPIARE tutti i metodi in tutte le classi è una buona strada, nonostante abbiano TUTTI la STESSA implementazione?

Comunque giá conosco il metodo di creare un oggetto Weapon e assegnargli un istanza di AK... ma il mio intento era creare un oggetto AK con l'istanza di AK.


Sent from my GT-I9301I using Tapatalk
 
Non ho capito che intendi lol



Per "nuovi metodi PIU i precedenti" intendi dire che COPIARE tutti i metodi in tutte le classi è una buona strada, nonostante abbiano TUTTI la STESSA implementazione?

Comunque giá conosco il metodo di creare un oggetto Weapon e assegnargli un istanza di AK... ma il mio intento era creare un oggetto AK con l'istanza di AK.


Sent from my GT-I9301I using Tapatalk

i precedenti puoi usarli senza riscriverli ,se non devi ridefinirli :soso:
non mi è chiaro quello che vuoi fare ?
se erediti una classe , nella derivata puoi utilizzarne anche i metodi :soso:
 
i precedenti puoi usarli senza riscriverli ,se non devi ridefinirli :soso:
non mi è chiaro quello che vuoi fare ?
se erediti una classe , nella derivata puoi utilizzarne anche i metodi :soso:
Questa è la classe Weapon
06e69023ebd6320989124adaed324f10.jpg


Questa la classe AK (senza i metodi)
d05e5c875b406c47269ed9ec9611f429.jpg


Questo il Main
0a2074ae2e09aae0969306298aa8e54a.jpg


Questo l'output
94f5c59cd9753c1fd553b20971152212.jpg


Stampa tutti e 4 i valori come 0 nonostante nel costruttore li inizializzo con dei valori ben precisi...


Sent from my GT-I9301I using Tapatalk
 
Se invece nella classe AK tolgo i commenti... tutto funziona come dovrebbe

Sent from my GT-I9301I using Tapatalk
 
Occhio che non stai utilizzando correttamente l'ereditarietà... Nella classe Weapon hai definito dei campi che descrivono vari attributi della tua arma, ma questi sono definiti private perciò non vengono ereditati dalla classe figlia AK47. In campi che vai a ridefinire nella classe figlia sono una cosa completamente diversa da quelli della classe padre; l'effetto che hai è quindi quello di inizializzare i campi della classe figlia, ma non quelli della classe padre. Quindi i metodi ereditati della classe padre restituiscono i valori dei campi della classe padre (che non sono stati inizializzati quindi sono a 0).
In definitiva due alternative potrebbero essere queste:
- Creare un costruttore della classe weapon che inizializzi i campi della classe Weapon e che venga richiamato anche dai costruttori delle classi figlie
- Eliminare i campi delle classi figlie e rendere quelli della classe Weapon protected in modo che vengano ereditati anche dalle classi figlie
Non so se sono stato sufficientemente chiaro, in caso chiedi altre spiegazioni ;)
 
  • Like
Reactions: 1 person
Occhio che non stai utilizzando correttamente l'ereditarietà... Nella classe Weapon hai definito dei campi che descrivono vari attributi della tua arma, ma questi sono definiti private perciò non vengono ereditati dalla classe figlia AK47. In campi che vai a ridefinire nella classe figlia sono una cosa completamente diversa da quelli della classe padre; l'effetto che hai è quindi quello di inizializzare i campi della classe figlia, ma non quelli della classe padre. Quindi i metodi ereditati della classe padre restituiscono i valori dei campi della classe padre (che non sono stati inizializzati quindi sono a 0).
In definitiva due alternative potrebbero essere queste:
- Creare un costruttore della classe weapon che inizializzi i campi della classe Weapon e che venga richiamato anche dai costruttori delle classi figlie
- Eliminare i campi delle classi figlie e rendere quelli della classe Weapon protected in modo che vengano ereditati anche dalle classi figlie
Non so se sono stato sufficientemente chiaro, in caso chiedi altre spiegazioni ;)
Grazie mille per la risposta.
Optando per la seconda opzione:
Ho eliminato gli attributi dalla classe figlia e reso protetti quelli della padre.

L'errore però che mi segnala il compilatore è questo:

2af1f446bfb935aabb4e8bc89fdbb132.jpg


Il costruttore non trova quegli attributi che ho eliminato... ma non doveva ereditarli???

Sent from my GT-I9301I using Tapatalk
 
Mi correggo... ho verificato e C++ non ammette questo comportamento... devi usare per forza la prima soluzione...
 
Mi correggo... ho verificato e C++ non ammette questo comportamento... devi usare per forza la prima soluzione...
Era troppo semplice per essere ammesso dal C++ :emoji_relieved:

Grazie mille per l'aiuto nonostante abbia usato metodi un po' scomodi essendo fuori casa.

Problema risolto! Grazie ancora