Dubbio su metodi statici
Lavorando nella mia classe dado in c++ ho definito in un file cpp di implementazione una funzione static che restituisce il numero di dadi chiamati, poi in un altro file nel main ho scritto questo comando:
L'unica cosa è che dopo aver chiamato la funzione dadiCreati ho dimenticato le (), però il compilatore non mi ha dato segno di errore ma ha stampato un numero casuale. Perchè questo?
cout<<"Dadi creati:"<<Dado::dadiCreati<<endl;
L'unica cosa è che dopo aver chiamato la funzione dadiCreati ho dimenticato le (), però il compilatore non mi ha dato segno di errore ma ha stampato un numero casuale. Perchè questo?
Risposte
Se posti il codice completo possiamo fornirti una risposta precisa, altrimenti dovrai accontentarti di qualche supposizione.
"olegfresi":
Lavorando nella mia classe dado in c++ ho definito in un file cpp di implementazione una funzione static che restituisce il numero di dadi chiamati, poi in un altro file nel main ho scritto questo comando:
cout<<"Dadi creati:"<<Dado::dadiCreati<<endl;
L'unica cosa è che dopo aver chiamato la funzione dadiCreati ho dimenticato le (), però il compilatore non mi ha dato segno di errore ma ha stampato un numero casuale. Perchè questo?
Il valore di una funzione (non di una chiamata a funzione, ma della funzione stessa) è identico al suo indirizzo. Avresti potuto scrivere "& Dado::dadiCreati" e sarebbe stata la stessa cosa.
Il motivo per cui una funzione (e non solo una chiamata) può essere risultato di un'espressione è che così puoi assegnarla a una variabile per esempio per usare funzioni di ordine superiore.
#include <iostream> class A { public: static void static_function(){ std::cout << "Dentro la classe A" << '\n'; }; }; void free_function() { std::cout << "Dentro una funzione libera" << '\n'; } int main() { // Assegno a una variabile void (*function_variable)() = A::static_function; // & A::static_function // Chiamo la variabile function_variable(); // Assegno ancora function_variable = free_function; // & free_function // Chiamo la variabile function_variable(); }
Ahh, ora si che ho capito, grazie mille per l'aiuto!!