Alcuni consigli

di il
6 risposte

Alcuni consigli

Vorrei chiedere parere per alcune "finezze". Sono cose che ho già fatto, ma che vorrei sapere se vanno bene o ci sono modi migliori per farle.
- Io ho una classe per la grafica, e all'interno ho un puntatore ad un oggetto di una classe logica. Per la classe logica mi conviene rendere i vari campi pubblici oppure mettere private+il friend?
- Se ho una classe con un sacco di puntatori, nel distruttore della classe devo mettere per forza tutti i vari delete per liberare memoria?
Altre cose le metterò appena mi verranno in mente

6 Risposte

  • Re: Alcuni consigli

    E se facessi il tutto senza usare i puntatori? Cosi niente new e niente delete cosi il RAII si occupa di tutto. Io metterei come pubblico solo le funzioni che la classe espone all'esterno se no che senso ha.
    http://en.m.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization
  • Re: Alcuni consigli

    Altra domanda. Io ho sempre sta classe logica che prende in input un tipo di una mia classe. Ovviamente c'è un metodo che mi controlla se effettivamente l'input appartiene a quella classe. Questa funzione mi conviene metterla nella classe in questione e poi usare i :: per chiamarla, oppure la lascio fuori? Tenendo conto che l'include della classe c'è ugualmente, è più efficiente lasciarla fuori o metterla nella classe?
  • Re: Alcuni consigli

    Sarebbe meglio che mostrassi il codice (anche a grandi linee), altrimenti si rischia di dirti una cosa quando te ne serve un'altra.
  • Re: Alcuni consigli

    dragneel ha scritto:


    Vorrei chiedere parere per alcune "finezze". Sono cose che ho già fatto, ma che vorrei sapere se vanno bene o ci sono modi migliori per farle.
    - Io ho una classe per la grafica, e all'interno ho un puntatore ad un oggetto di una classe logica. Per la classe logica mi conviene rendere i vari campi pubblici oppure mettere private+il friend?
    Solitamente la classe logica è la classe principale e le classi grafiche sono subordinate, nel senso che le classi logiche sono quelle che risolvono il tuo problema, sono in genere portabili e la loro interfaccia pubblica e determinata dal problema. Le classi grafiche fanno da ponte tra l' utente e le classi logiche e sono specifiche per un certo ambiente.

    Mettere nella classe logica il friend ad una classe grafica significa creare un legame troppo stretto, sarebbe da evitare, il discorso però è complesso, se ancora non l' hai fatto ti consiglio di guardarti i Design Patterns.

    dragneel ha scritto:


    Se ho una classe con un sacco di puntatori, nel distruttore della classe devo mettere per forza tutti i vari delete per liberare memoria?
    Altre cose le metterò appena mi verranno in mente
    Una classe che ha un sacco di puntatori solitamente è perchè usa le classi in maniera polimorfa (ha puntatori a classi base a cui vengono assegante classi derivate), oppure condivide un oggetto con altre classi, se così non fosse segui il consiglio di skynet e riduci il numero di puntatori.

    Nel caso di oggetti condivisi da più classi è imortante stabilire quale classe è il proprietario dell' oggetto, ovvero chi è incaricato di distruggerlo, la cosa è delicata ed anche in questo caso la conoscenza dei Design Patterns è utile.

    Comunque la risposta è si, devi mettere tutti i delete per liberare la memoria (a meno che già lo faccia qualche altra classe).
  • Re: Alcuni consigli

    shodan ha scritto:


    Sarebbe meglio che mostrassi il codice (anche a grandi linee), altrimenti si rischia di dirti una cosa quando te ne serve un'altra.
    È troppo XD. Comunque a grandi linee:
    - Ho le classe A, B e C che sono quelle che devo effettivamente usare
    - Ho la classe grafica che chiama quella logica e gli passa l'input
    - La classe logica chiama checkA(), poi se c'è stata un'eccezione, chiama checkB() e stessa cosa con checkC().
    La mia domanda era: questi 3 checkA, checkB e checkC mi conviene lasciarli come metodi della classe logica, oppure mettere checkA dentro la classe A e poi fare A::checkA()?

    Altra domanda. Posso fare un inclde di un file .cpp invece che di un .h? Dentro una classe ho un sacco di metodi che non sono STRETTAMENTE legati a lei, e quindi vorrei fare un po' di pulizia spostandoli XD
  • Re: Alcuni consigli

    Basta anche un esempio.
    Sempre a grandi linee.
    Il massimo della flessibilità lo hai "doppiando" le funzioni, nel senso che la classe logica avrà un metodo checkA che invocherà il metodo checkA della classe A (e via così per le altre classi).
    Se poi A,B,C, sono polimorfe basterebbe un solo metodo nella classe logica al quale passi il puntatore della classe di cui vuoi fare il check.
    Potrebbe non essere la soluzione che cerchi, ma da come mi sono immaginato il design ha buone probabilitità di esserlo. Per questo serve un esempio concreto.
    Posso fare un inclde di un file .cpp invece che di un .h?

    Solo se sei masochista. Piuttosto crea una nuova classe che raggruppi questi elementi non strettamente legati e usala per interagire con tale classe.
Devi accedere o registrarti per scrivere nel forum
6 risposte