Thread obsoleto [C/C++] Le classi

gedamial

Utente Senior
Autore del topic
9 Giugno 2010
1.937
69
Miglior risposta
0
Salve.

Volevo chiedervi se qualcuno di voi è disposto a spiegarmi in maniera ULTRA-ELEMENTARE cos'è una classe e come se ne inizializza una. Vi dico la verità, ho visto su Google, Youtube e altri siti che Google mi ha cercato ma non capisco! E' un argomento che non riesco a mettermi in testa.

Per esempio a cosa può servire? A che serve dichiarare funzioni e variabili private? In cosa si differenzia dalle strutture?

Potreste farmi un esempio elementarissimo?

Grazie in anticipo :emoji_slight_smile:
 
Il concetto di classe implica il concetto di programmazione orientata agli oggetti, e alla concezione di "classe" come oggetto.
Nel senso, se devi fare un programma che gestisce dei libri, tu sai che i libri hanno tutti un codice ISBN, un titolo, un autore, ecc. Bene, tutte queste proprietà sono comuni, e possono essere raggruppate in una classe (e prendono il nome di attributi). Con questa classe poi puoi farci tante cose, attraverso i metodi (le funzioni all'interno delle classi). In generale, tanti oggetti diversi istanze della stessa classe differiscono per il valore dei loro attributi. Comunque, questa è un'infarinatura molto veloce, e non si possono imparare questi concetti su youtube. Il linguaggio che di solito si utilizza per entrare nella OOP è Java. :emoji_slight_smile:

PS: Per le variabili private, pubbliche o protette devi prima entrare nell'ordine di ore della OOP. In generale comunque le cose dichiarate "public" saranno accessibili anche dal codice esterno alla classe, mentre le "private" solo all'interno della stessa.
 
Il concetto di classe implica il concetto di programmazione orientata agli oggetti, e alla concezione di "classe" come oggetto.
Nel senso, se devi fare un programma che gestisce dei libri, tu sai che i libri hanno tutti un codice ISBN, un titolo, un autore, ecc. Bene, tutte queste proprietà sono comuni, e possono essere raggruppate in una classe (e prendono il nome di attributi). Con questa classe poi puoi farci tante cose, attraverso i metodi (le funzioni all'interno delle classi). In generale, tanti oggetti diversi istanze della stessa classe differiscono per il valore dei loro attributi. Comunque, questa è un'infarinatura molto veloce, e non si possono imparare questi concetti su youtube. Il linguaggio che di solito si utilizza per entrare nella OOP è Java. :emoji_slight_smile:

Ti ringrazio per l'immediata ed efficace risposta. Grazie a quel maledetto esempio ho capito. Su YouTube sono tutte pecore che scrivono, scrivono, scrivono e poi non si capisce nulla.

Quindi, in pratica...

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Una volta creata questa classe, cosa ci posso fare all'interno del main()?
 
Nel main() puoi creare tanti "libri", ma io non posso aiutarti più di tanto perché non conosco le classi in C++. Prova Java. :emoji_relieved:
 
Provo a spiegarti le classi in modo diverso da come te le ha spiegate Dvdrigato:

Una classe intanto, e questo te lo ha detto anche @Dvdxseo, è un oggetto e come tale esiste solo ed esclusivamente nei linguaggi orientati agli oggetti. Essendo un oggetto occupa memoria e la quantità di memoria occupata dipende da quello che sta dentro : che siano altre classi - è possibile inserire molte altre classi all'interno di una classe -, metodi, variabili e quant'altro. La cosa particolare delle classi nel C++ - e non nel C, ricordiamo che il C è un linguaggio procedurale nato con il metodo top-down, la sua evoluzione nel C++ ne ha ampliato la potenzialità e la funzionalità - sta nel fatto che possiede una cosa che non possiedono gli altri linguaggi ovvero i distruttori - alt, gli altri linguaggi possiedono i distruttori ma il programmatore non ne scrive il corpo cioè cosa succede quando la classe viene virtualmente distrutta -. Ti faccio una rapida spiegazione con il relativo esempio :

Se voglio creare una classe in C++ innanzitutto devo darle il nome, il che è molto importante perché non sono è corretto dal punto di vista logico ma serve anche al programmatore - e in generale a chiunque legge il codice - di capire cosa rappresenta quella classe - ogni oggetto rappresenta qualcosa, nell'esempio di Dvdxseo quella classe rappresenta dei libri -. Per creare una classe basta scrivere :

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

PS: noterai il punto e virgola dopo la chiusura delle parentesi.

All'interno di questa classe puoi mettere tutto ciò che ti serve per scrivere il tuo programma. Calma però, questo non significa che se devi creare un metodo che ti faccia una somma tra i numeri e la classe ha a che fare con dei libri non ha senso inserire quel metodo in quella classe, perciò riformulo l'affermazione : all'interno di questa classe puoi mettere tutto ciò che serve per scrivere il tuo programma in relazione alla funzionalità - ovvero a quello che fa - la classe. Quando si richiama una classe si dice che si istanzia, ovvero la si crea, dunque occuperà memoria. Per fare questo basta scrivere nella porzione di codice in cui mi serve crearla :

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Come vedi all'interno della classe MyClass ho creato due metodi, rispettivamente il costruttore - il primo, che "costruisce" ovvero crea la classe, la istanzia, quello che dicevo prima - e il secondo che è il distruttore - serve per rilasciare la memoria occupata dalla classe -. Nel main() invece ho scritto *myclass con l'asterisco perché - ancora non sei arrivato a questo argomento - le classi sono dei puntatori, i puntatori sono dei tipi di dati che rappresentano il riferimento in memoria - in questo caso - della classe. Non approfondisco perché ti confonderai, per adesso prendi per buona questa scrittura. Andando avanti : ho dichiarato il costruttore e il distruttore come public, in modo che la classe potrà essere creata in qualsiasi parte del programma; poi se la variabile booleana say_hello viene settata come true - come da esempio - allora il programma scriverà Hi master! altrimenti non scriverà niente, successivamente dopo aver stampato il messaggio la classe viene distrutta.

In realtà ci sarebbe molto alto da dire sulle classi, non posso scriverti tutto. Procedi gradualmente, ancora per le classi è troppo presto.

Per quanto riguarda la differenza tra una classe e una struttura in realtà sono molto simili, ma la classe è molto più versatile perché permette la protezione di suoi elementi attraverso le keyword public, private e quant'altro. Possono gestire un numero infinito di elementi se dichiarate come template ma questo per ora lascialo perdere, è un po' presto. Infine supportano le fondamenta della programmazione orientata agli oggetti : ereditarietà - ovvero costruire classi che derivano da altre classi -, polimorfismo - le classi template di cui parlavo poco fa - e l'incapsulamento - ovvero la protezione dei suoi elementi -.
 
Ultima modifica:
  • Like
Reactions: 1 person
@System32 grazie mille ma per quanto riguarda la sua utilità e il suo funzionamento che mi dici?

So che con una struttura chiamata orario, posso avere un membro chiamato ore (di tipo int) e quindi:

libri.ore = 22;

Con la classe invece?
 
Con una struttura definisci un tipo di dato, e un dato non ha attributi o metodi.
La classe invece definisce un oggetto: tu devi pensarla proprio come una cosa fisica. Col tempo e la pratica capirai facilmente la differenza, e ti accorgerai che sono due cose diverse. Per esempio, se vuoi creare un cerchio puoi usare una classe, dandogli gli attributi come il centro e il raggio. Usando una struttura il tutto risulterebbe più complicato e poco sensato, capisci?

In più, con la classe puoi creare un metodo al suo interno che calcola l'area in base al raggio che gli hai assegnato quando hai istanziato un cerchio, non so se mi spiego..

Per esempio, pensa all'orario e all'orologio: per l'orario puoi usare una struttura, ma l'orologio è un oggetto, quindi di solito si usa una classe.
 
@System32 grazie mille ma per quanto riguarda la sua utilità e il suo funzionamento che mi dici?

So che con una struttura chiamata orario, posso avere un membro chiamato ore (di tipo int) e quindi:

libri.ore = 22;

Con la classe invece?

Per una classe è lo stesso, devi però dichiarare la variabile ore di tipo public e accedervi tramite l'operatore -> :

Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
 
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!


Sono molto simili...
Ma te pensa così: il cerchio è un dato o un oggetto? E poi tieni di conto che con le classi puoi anche fare delle operazioni senza conoscere il valore dei dati al suo interno.. Il principio delle classi è quello di astrarre e raccogliere quanti più dati (coerenti) insieme.
 
Ma te pensa così: il cerchio è un dato o un oggetto? E poi tieni di conto che con le classi puoi anche fare delle operazioni senza conoscere il valore dei dati al suo interno.. Il principio delle classi è quello di astrarre e raccogliere quanti più dati (coerenti) insieme.

Ok fin qui ci sono arrivato. Ma ora mi serve come impostare una classe @System32

Intendo un esempio banalissimo ma super efficace per farmi capire COME usarla
 
Ma per adesso non ti serve, non ha senso che io ti faccia un esempio quando poi arriverai all'argomento ti farò tutti gli esemi che vuoi. Per adesso parti dalle basi.

Ecco, lo hai detto: BASI

Mi serve un esempio BASE :emoji_relieved:

Su internet ci sono, eh voglia! Ma non capisco D: a volte usano anche il NAMESPACE prima di una classe... e arrivano quei momenti che mi dico: "Programmerò a vita senza classi"
 
Il namespace std se ci hai fatto caso devi usarlo sempre: infatti se non usassi quell'istruzione, dovresti precedere std:: a molte istruzioni. patpat
 
@HabboFanNumero1

i namespace si utilizzano diciamo come "grossi contenitore" di classi concrete o astratte. In genere accomunano un gruppo di classi tra loro simili. Per esempio
Java.Utils ad esempio contiene tutte la classi e interfaccie del collection framework.

Come ripetuto già da system32 procedi gradualmente :emoji_slight_smile:
 
Devi entrare in un'altra mentalità, non basta conoscere la sintassi. :emoji_relieved:
 
Devi entrare in un'altra mentalità, non basta conoscere la sintassi. :emoji_relieved:

Quale mentalità? Quella della logica? Si, è certo. La logica è la vera base dell'algoritmo che poi forma il programma finale. Ma il fatto è che voglio apprendere più cose possibili, assemblarle e POI creare dei programmi con una logica di ferro (magari non saranno di mia invenzione quei programmi se ci vuole la logica :emoji_relieved:)
 
Ecco, lo hai detto: BASI

Mi serve un esempio BASE :emoji_relieved:

Sì ma cosa te ne fai se prima non sapevi che il for serviva per ciclare un array ? Non è il momento di parlare di classi, studia prima le basi del C.

Su internet ci sono, eh voglia! Ma non capisco D: a volte usano anche il NAMESPACE prima di una classe... e arrivano quei momenti che mi dico: "Programmerò a vita senza classi"

Non essere tragico, arriverai alle classi in modo graduale.

Quale mentalità? Quella della logica? Si, è certo. La logica è la vera base dell'algoritmo che poi forma il programma finale. Ma il fatto è che voglio apprendere più cose possibili, assemblarle e POI creare dei programmi con una logica di ferro (magari non saranno di mia invenzione quei programmi se ci vuole la logica :emoji_relieved:)

Sono stato io a dirti di apprendere più cose possibili e ti ho anche detto come fare, perché non inizi ?