Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475

    [OOP] Come gestire un membro che può essere variato anche dall'esterno?

    Ciao a tutti, ho una domanda un po' teorica. Sto usando il C++, ma riguarda più che altro il design della classe in sè...

    In pratica, ho un progetto dove uso le SDL. Dato che devo disegnare sullo schermo, ho pensato bene di creare una classe che incapsuli le funzioni dello schermo.

    Questa classe Screen contiene un puntatore SDL_Surface, che è la superficie su cui il programma viene disegnato, e un po' di variabili associate (altezza, larghezza...).

    Il problema è che l'operazione di disegno modifica questa superficie. Alle funzioni di disegno io devo però passare un SDL_Surface*, che poi verrà modificato, e non posso passarlo come costante.
    In pratica, perchè le cose funzionino questo membro deve essere pubblico.
    In realtà ho fatto così:

    codice:
    SDL_Surface* Screen::surface(void)
    {
        return surf; //restituisce il puntatore gestito dalla classe
    }
    Ma la sostanza non cambia: è vero che non è possibile modificare direttamente il puntatore contenuto nella classe, ma è comunque possibile modificare la superficie gestita senza passare dai metodi della classe.

    Secondo voi, quale può essere il metodo migliore per gestire un caso simile?
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Aggiungi inline
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da linoma
    Aggiungi inline
    Che c'entra?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381

    Re: [OOP] Come gestire un membro che può essere variato anche dall'esterno?

    Originariamente inviato da Ippo343
    Secondo voi, quale può essere il metodo migliore per gestire un caso simile?
    Non credo ci sia una soluzione realmente efficace. Se una funzione si aspetta un descrittore di basso livello (puntatore, HANDLE, HDC, quel che vuoi), quello gli devi dare.
    Semmai l'unica cosa di cui preoccuparsi è che non si verifichi una race condition, cioè che la funzione a cui passi il descrittore non lo chiuda al posto tuo.
    In quel caso l'unica cosa da fare è clonare il descrittore e passarlo alla funzione.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    era per evidenziare sarcasticamente una mia visione della natura dell'oggetto.
    Per gli Spartani e Sparta usa spartan Il mio github

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Grazie shodan, me lo aspettavo anche io... almeno ho il vantaggio che so di non doverlo mai passare a funzioni che possano distruggere l'oggetto puntato (e per quello che ne so, nemmeno modificarne dimensioni o altri attributi).

    linoma, per adesso mi accontenterei di far funzionare il programma, a farlo funzionare velocemente ci pensiamo dopo
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

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.