Newsgroup: it.comp.lang.c++
Titolo: Classe

Ciao a tutti,
uff.... ho il cervello che mi frulla a 1000, è surriscaldato a 80°C, peggio
della mia CPU che segna solo 51°C. Avrei bisogno di un vostro gentile aiuto.
Non c'ho capito una mazza su 'ste classi. Provo a spiegarmi in parole povere
su quello che ho capito io facendo un semplice esempio. All'inizio del
programma, prima della funzione main definisco (o dichiaro?) la classe
DisegnoDiagramma, in questo modo:
class DisegnoDiagramma {
  public:
      int a;
      float b;
      void funzione1();
      void funzione2();
};
Mi sembra di aver capito che ogni classe esegue un certo lavoro, utilizzando
le variabili e le funzioni elencate nella sua struttura, nel mio caso
disegna un diagramma. A questo punto io posso richiamare la classe in
qualsiasi punto all'interno della funzione main ed ogni volta mi disegnera
il diagramma. Giusto? In che modo devo richiamare la classe? Così:
DisegnoDiagramma
Gradirei anche qualche spiegazione sul doppio duepunti (::).
DisegnoDiagramma::........ ?!??!
Qualsiasi aiuto è gradito. Grazie mille.
Tartaro

Grazie mille.
Prego
Ciao
Antonio.

disegna un diagramma.
Non è proprio così, questa è meglio la definizione di un metodo di una
classe. Una classe invece rappresenta un tipo di oggetto che ha certe
proprietà denominati attributi (o membri), esegue un insieme di "lavori"
denominati metodi, ha una serie di caratteristiche che ne determinano il
comportamento e la struttura (ereditarietà, polimorfismo, incapsulamento).
Nel tuo caso sarebbe più appropriato:
class Diagramma {
  public: //metodi
      void Disegna();
      void Ruota();
      void Ingrandisci();
...
 private: //attributi
      int a;
      float b;
...
};
Guarda questo ottimo libro:
http://www.camtp.uni-mb.si/books/Thinking-in-C++/TIC2Vone-distribution/html/Chapter01.html


Non è corretto... :
    - la "definizione di un tipo" (es. la definizione di una classe o di un
enumerazione) effettivamente "non" richiede allocazione di memoria,
    - la "definizione di un oggetto" (es. ClasseA ogg;) richiede allocazione
di memoria;
    - la "dichiarazione di un oggetto" (es. extern ClasseA ogg;) "non"
richiede allocazione di memoria.
Walter

 ha scritto nel messaggio
news:cd5hno$12n8$1...@newsreader1.mclink.it...


Scusa ma è giusto per chiarire un po le cose, a me hanno insegnato ad
esempio :
int main(){
int a;
return 0;
}
scrivere int a vuol dire dichiarare una variabile di nome a di tipo intero e
viene allocato spazio in memoria per contenere un intero, sul definire una
variabile sinceramente nn mi ci trovo ma cmq mi hanno sempre spiegato che le
definizioni di tipi e di classi nn richiedono allocazione di memoria.
E se mi consenti l'uguaglianza oggetto = variabile , cioè mi consenti di
dire che l'oggetto è una variabile allora ti diro che nn sono per niente
d'accordo perchè
scrivere ClasseA ogg, per quello che mi hanno insegnato vuol dire aver
dichiarato e inizializzato (presuppongo venga chiamato un costruttore) una
variabile di tipo ClasseA e quindi il compilatore si è preoccupato di
allocare spazio per una variabile di tipo ClasseA.
Ti assicuro che prima di risponderti mi sono accertato di questa cosa
consultando fonti certe e quindi sono sicuro di non essermi sbagliato.
Antonio.


Allora, cercherò di essere esaustivo.
La riga di codice:
int a;
corrisponde a due cose:
- "definizione" della variabile a (ovvero allocazione di memoria e
invocazione del costruttore)
- "dichiarazione" dell'identificatore a (ovvero si afferma che il nome a
corrisponde a una variabile di tipo intero)
In altri termini "una definizione vale sempre anche come dichiarazione".
----------------------------------------------------
La riga di codice:
extern int a
corrisponde invece soltanto ad una "dichiarazione", che come tale non alloca
memoria.
----------------------------------------------------
Il codice
class A
{
    int s;
    ....
}
corrisponde a una "definizione" della classe A. Ovviamente "definire un
tipo" (una classe, un enumerato ecc...) è cosa diversa dal "definire una
variabile o un oggetto". Credo la confusione sia dovuta a questo. Il termine
"definizione" si applica sia a tipi sia a variabili, ma con due significati
distinti.
----------------------------------------------------
infine il codice:
class A;
corrisponde a una "dichiarazione" della classe A. In altri termini si
afferma che A è il nome di un tipo "classe", ma non se ne definisce la
struttura.
Analogamente si può fare distinzione tra "dichiarazione" e "definizione" di
una funzione: la "dichiarazione" consiste nel solo prototipo della funzione
(quella che va in genere nell'header file), mentre la "definizione" consiste
nel fornire il corpo della funzione stessa.
Effettivamente i termini "definizione" e "dichiarazione" si prestano a
fraintendimenti, dal momento che possono applicarsi tanto a "tipi", quanto a
"variabili" e a "funzioni", ma con significati differenti. Nel manuale di
Stroustrup comunque la differenza è ribadita più volte.
Ciao,
Walter

 ha scritto nel messaggio
news:cd84f2$2389$1...@newsreader1.mclink.it...

Ok ora mi è chiaro e mi andro a rileggere stroustrup per chiarirmi ancora
meglio sta cosa anche se sei gia stato abbastanza chiaro tu.
Ciao,
Antonio.

 ha scritto nel messaggio
news:I8NJc.84043$G%.27503@tornado.fastwebnet.it...

Mi fa piacere :-)
Saluti,
Walter


Piacere Mio, se capisco di essere in errore perchè continuare a perseverare,
grazie per avermi chiarito le idee?
 :-)
Antonio.