PDA

Visualizza la versione completa : [C++] Metodi e classi


FinalFantasy
18-10-2005, 23:32
class Book
{
public:
Book( const string& title ) : title_( title ) { n_++; }
const string& title() const { return title_; }
static int numberOfBooks() { return n_; }
private:
string title_;
static int n_;
};



vorrei sapere di questa classe, trovata su internet, cosa significano alcune cose:

costruttore book: perché il paramentro title dovrebbe essere una costante :master: ? Cosa vuol dire tutto il metodo title? Perché quei const di qua e di la?

Cosa ha di particolare un metodo statico?

Grazie e ciao :ciauz: :ciauz:

infinitejustice
19-10-2005, 00:35
class Book
{
public:
Book( const string& title ) : title_( title ) { n_++;}
const string& title() const { return title_; }
static int numberOfBooks() { return n_; }
private:
string title_;
static int n_;
};




costruttore book: perché il paramentro title dovrebbe essere una costante?

Forse per sottolineare che la stringa passata non viene modificata.
Cmq poteva risparmiarsi di utilizzare la constructor initializer list, che nn è necessaria.


Cosa vuol dire tutto il metodo title? Perché quei const di qua e di la?

Restituisce il titolo del libro. La funzione è const per sottolineare (e quindi correggere a tempo di compilazione) che al suo interno l'oggetto Book nn viene modificato.

p.s. in C++ nn esistono i methods. Quello è Java. In C++ esistono le member functions ;)


Cosa ha di particolare un metodo statico?

Per essere invocata senza far riferimento ad un oggetto della classe.
Cioè puoi invocarlo come Book::numberOfBooks();

FinalFantasy
19-10-2005, 16:04
Originariamente inviato da infinitejustice
p.s. in C++ nn esistono i methods. Quello è Java. In C++ esistono le member functions ;)


Come chiamare lettera corrispondenza...cioè la stessa cosa

infinitejustice
19-10-2005, 16:31
Originariamente inviato da FinalFantasy
Come chiamare lettera corrispondenza...cioè la stessa cosa

...come usare gli riferito ad un soggetto femminile invece di le.
La gente ti capisce lo stesso, ma nn è corretto ;)

LeleFT
19-10-2005, 17:05
Il termine metodo deriva dalla teoria della programmazione orientata agli oggetti.
Un metodo è una funzione che serve a manipolare i dati di un oggetto. Questo indipendentemente dal linguaggio utilizzato.

Che dopo in C++ i metodi vengano implementati mediante funzioni membro (o member functions) è un altro discorso.

Dalla teoria della programmazione Object Oriented si evince che un oggetto è una struttura dati dotata di proprietà (che ne caratterizzano lo stato) e di metodi (funzioni che ne permettono la manipolazione e l'interazione con gli altri componenti dell'applicazione).


Ciao. :ciauz:

anx721
19-10-2005, 20:57
Book( const string& title ) : title_( title ) { n_++; }


qui il const serve a dire che l'oggetto passato non deve esere modificato; ma non serve solo a questo; se ometi il const potrai verificare che il compilatore non ti acceta dichiarazioni di questo tipo:

Book b("ciao");

ovvero non ti permette di passare al costruttore, o a un metodo, una reference ad un oggetto creato "al volo" se tale parametro non è stato dichiarato come const



const string& title() const { return title_; }


qui il primo consto serve a dire che come prima il valore ritornato è una reference costante, mentre il secondo se non ricordo male sta a dire che la funzione title non modifica i dati dell'oggetto.

La presenza degli oggetti in quanto tale e delle reference, oltre ai puntatori ad oggetti, purtoppo appesantisce e complica veramente tanto la sintassi del c++

Loading