[C++]
Ho un piccolo dubbio. Ho una classe e dichiaro in essa una funzione membro. Definisco la funzione membro all'esterno della classe, come faccio poi a richiamare tale funzione? attraverso ::? cioè il costrutto è tipofunzione nomeclasse::funzione(); ?
Risposte
Mostra il codice. Non sono sicuro di aver capito esattamente come hai definito la classe. In generale hai tuttavia bisogno di una istanza della classe per poter richiamare una funzione membro e non usi :: ma il punto (o -> nel caso in cui si abbia a che fare con un puntatore).
Ad esempio se ho:
Class example {
public:
int function();
};
function() {
};
example prova;
essendo la definizione di function fuori come faccio a richiamare? faccio cosi:
int prova::function();
va bene?
Class example {
public:
int function();
};
function() {
};
example prova;
essendo la definizione di function fuori come faccio a richiamare? faccio cosi:
int prova::function();
va bene?
No, non va bene per diverse ragioni.
1. class va scritto minuscolo.
2. Il tuo codice non fa quello che hai descritto. La funzione membro function non è infatti stata definita nel tuo codice. Hai invece definito una funzione function che non appartiene alla classe example. In C++ hai tralaltro bisogno di inserire il valore di ritorno per cui il tuo codice potrebbe anche non compilare. Il modo corretto per farlo è il seguente:
3. Siccome la tua funzione membro NON è statica, deve essere richiamata da una istanza della classe. Qualcosa come il seguente insomma:
4. Per richiamare una funzione non si deve scrivere il valore di ritorno.
5. Per richiamare una funzione usando :: devi dichiarare la funzione static.
A questo punto puoi chiamare la funzione nel modo seguente:
1. class va scritto minuscolo.
2. Il tuo codice non fa quello che hai descritto. La funzione membro function non è infatti stata definita nel tuo codice. Hai invece definito una funzione function che non appartiene alla classe example. In C++ hai tralaltro bisogno di inserire il valore di ritorno per cui il tuo codice potrebbe anche non compilare. Il modo corretto per farlo è il seguente:
class example { public: int function(); }; int example::function() { // ... }
3. Siccome la tua funzione membro NON è statica, deve essere richiamata da una istanza della classe. Qualcosa come il seguente insomma:
example e; e.function();
4. Per richiamare una funzione non si deve scrivere il valore di ritorno.
5. Per richiamare una funzione usando :: devi dichiarare la funzione static.
class example { public: static int function(); }; int example::function() { // ... }
A questo punto puoi chiamare la funzione nel modo seguente:
example::function();
Perfetto! Grazie mille ! quindi l'eccezione è solo per le f static! il resto si chiamano attraverso un'istanza!
Sono andato in confusione perchè il mio libro dice:
Una funzione membro dichiarata nella definizione di una classe può esssere definita fuori da essa(e collegata alla classe con l'operatore binario di risoluzione dello scope). Che significa?
Una funzione membro dichiarata nella definizione di una classe può esssere definita fuori da essa(e collegata alla classe con l'operatore binario di risoluzione dello scope). Che significa?
Se guardi gli esempi che ho inserito nel mio precedente post puoi vedere che per definire l'implementazione della funzione ho dovuto scrivere int example::function() { .. } Se non avessi scritto example:: avrei definito una funzione che non era la funzione membro della classe. In quel modo sto dicendo al compilatore che voglio definire la funzione membro e non un'altra funzione con lo stesso nome.