Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21

Discussione: [C++] Classe astratta

  1. #1

    [C++] Classe astratta

    Quando creo una classe astratta vale sempre la regola di mettere l'interfaccia in un file .h e l'implementazione in un file cpp?
    I metodi che sono identici per tutte le classi derivate mi conviene definirli e implementarli direttamente nella classe astratta?
    Riguardo i metodi comuni alle classi derivate ma implementati in modo diverso nelle varie classi, cosa mi conviene fare nella classe astratta?

  2. #2
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Le regole non sono assolute ma dipendono dal programmatore, cmq in linea generale si mette l'interfaccia di una classe nel file .h per separare l'interfaccia dall'implementazione e quindi rendere la vita più facile a chi andrà ad usare quella classe (a cui importa solo dell'interfaccia).
    Se la tua classe è puramente astratta, oppure i metodi che implementi sono pochi e piccoli potresti voler mettere tutto in un unico file, altrimenti spezzi come al solito.
    E' ovvio che i metodi in comune li devi implementare nella classe astratta: metti che vuoi in futuro modificarli leggermente...è molto più comodo modificare soltanto la classe astratta piuttosto che modificare tutte le 5-6 classi derivate giusto?
    Per i metodi che cambiano...nella classe astratta non devi fare niente ti pare?

  3. #3
    Se tutte le classi derivate ereditano il metodo x() ma ciascuna lo implementa in modo diverso questo metodo non deve comparire nell'interfaccia della classe astratta come metodo astratto?

  4. #4
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Si, al 99% dei casi è così.

  5. #5
    Quando si verifica il restante 1%?
    Precisamente cosa cambia tra definirla anche nell'interfaccia della classe astratta o solo nella classe derivata?

  6. #6

  7. #7
    Quindi se per esempio ho un oggetto PezzoDegliScacchi...
    l'attributo Colore lo metto nella classe PezzoDegliScacchi perchè ce l'hanno tutte le classi derivate Cavallo, Pedone ecc...
    il metodo getColore oppure setColore è comune a tutte le classi derivate quindi anche questo lo metto nella classe PezzoDegliScacchi e lo implemento, giusto?
    Invece il metodo mossa, presente in tutte le classi derivate ma implementato in maniera diversa in ogni classe lo metto nell'interfaccia della classe PezzoDegliScacchi ma come metodo virtuale, quindi senza implementarlo?

  8. #8
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    Bravissimo! In questo caso è anche una questione logica: "pezzo degli scacchi" è un nome perfettamente astratto e non ha proprio il concetto di "muovere", lo acquista quando diventa un pezzo ben definito.

  9. #9
    Ma tra mettere l'interfaccia di mossa in PezzoDegliScacchi e non metterla cosa cambia? Cioè a cosa serve che in PezzoDegliScacchi ci sia questo metodo astratto? Non è equivalente definirlo direttamente nelle varie classi Pedone, Cavallo, ecc?

  10. #10
    Utente di HTML.it L'avatar di Dark867
    Registrato dal
    Mar 2010
    Messaggi
    435
    ...ma allora fai le cose senza sapere xke le fai..-.-
    Le classi astratte sono alla base del polimorfismo...cerca un po' su google questa parola e capirai.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.