Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    51

    [C++] Dubbio su classi = strutture?

    Ciao.
    Sto studiando come e' stato scritto il codice del progetto
    BSGUI (una GUI semplice semplice basata su openGL).

    Ci sono alcune cose che non capisco.
    Ad esempio nel codice sotto (un file .h) non capisco l'uso della
    struttura. Sembra essere tale e quale ad una classe...addirittura mi pare di capire che la struttura abbia persino un costruttore (Checkbox(Control *parent, int x1, int y1, int x2, int y2,char *caption) ed un distruttore (virtual ~Checkbox()

    Nelle documentazioni che ho trovato non accennano a quest'uso delle strutture (o forse lo fanno piu' avanti, nelle sezioni avanzate a cui non sono ancora arrivato). Vorrei sapere come giudicate questo utilizzo e che differenza c'e'tra questa struttura ed una classe vera e propria...


    Poi ho due dubbi da vero neofita (se e' troppo complicato potete non rispondermi, mi interessa di piu' l'uso della struttra sopra).

    1) Suppongo che l'ifndef serva a fare il modo che il codice venga
    eseguito solo la prima volta. Ma di preciso cosa accade? Cioe' se io ho 10 files, e tutti quanti hanno l'inclusione del file qui sotto, accadra' che il primo che lo include definisce il __BSGUI_CHECKBOXES_H_INCLUDED__ e gli altri 9 che lo includono si troveranno questa variabile (globale?) gia' definita e non lo leggeranno? Se si, il compilatore dove andra' a prendere i dati che gli occorrono, per i 9 files rimanenti?

    2) Che significa

    DataManager<bool>

    ??

    Ciao e grazie...ah, ecco il codice che non capisco:

    codice:
    #ifndef __BSGUI_CHECKBOXES_H_INCLUDED__
    #define __BSGUI_CHECKBOXES_H_INCLUDED__
    
    struct Checkbox : public Control
    {
    	char			*caption;
    	bool			hover;
    	bool			pushed;
    	DataManager<bool>	checked;
    
    	Checkbox(Control *parent, int x1, int y1, int x2, int y2,char *caption);
    	virtual ~Checkbox();
    
    	virtual void setCaption(char *newCaption);
    
    	virtual void render();
    	
    	virtual void setState(bool checked);
    
    	virtual void onMouseDown(int x, int y, int b);
    	virtual void onMouseUp(int x, int y, int b);
    	virtual void onMouseEnter();
    	virtual void onMouseExit();
    };
    
    #endif

  2. #2
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299
    Effettivamente la dichiarazione è quella di una classe, anche se c'è scritto "struct". Forse il compilatore su cui è stato sviluppato il codice permette cose sporche del genere... Secondo me, converrebbe scriverci "class", perchè di solito le struct hanno solo attributi, e non metodi o costruttori.

    Se poi ti si compila anche così, tanto meglio...

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    51
    Quindi e' sbagliato???
    Strano me la avevano indicata come una libreria ben scritta...
    Non e' che e' un qualche uso avanzatissimo delle struct??

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    In C una struttura puo' essere costituita solamente da attributi.

    In C++ non e' così. Una struct si puo' comportare come una classe.
    L'unica differenza è che nella struttura, per default, i membri sono pubblici, in una classe sono privati.

    La scrittura e' quindi corretta.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    51
    Ah...ok...quindi e' un modo piu (semplice?) di dichiarare una classe...

    Grazie.

    E riguardo gli altri due punti? Qualcuno ha tempo di spiegarmi la cosa?

    Ciao!

  6. #6
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299
    A questo punto ha ragione Oregon, scrivere "struct" è accettato dal compilatore (secondo me una struct simile a una classe confonde le idee...)

    Per quanto riguarda gli altri due punti:

    1) Gli altri nove file non caricheranno più l'header, perchè sarà già stato caricato la prima volta. In Visual C++ esiste una soluzione più pulita, la direttiva "#pragma once", che indica al compilatore di caricare un dato header una sola volta (gli altri file che ne hanno bisogno lo troveranno già caricato).

    2) DataManager<bool> indica un tipo "contenitore", cioè la cui definizione contiene un tipo di dato definibile dall'utente. Un esempio famoso è list<int>, che indica una lista contenente numeri interi.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    51
    Grazie!!!
    Abbiate pazienza con un principiante...!
    Ciao,

    Zax

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.