Dubbio su metodi statici

Messaggioda ZfreS » 13/07/2018, 15:24

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:
Codice:
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?
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 672 di 4589
Iscritto il: 22/10/2016, 17:52

Re: Dubbio su metodi statici

Messaggioda Super Squirrel » 13/07/2018, 18:40

Se posti il codice completo possiamo fornirti una risposta precisa, altrimenti dovrai accontentarti di qualche supposizione.
Chi dorme in democrazia, si sveglia in dittatura.
Super Squirrel
Senior Member
Senior Member
 
Messaggio: 247 di 1486
Iscritto il: 16/05/2013, 22:05

Re: Dubbio su metodi statici

Messaggioda claudio86 » 13/07/2018, 19:05

olegfresi ha scritto: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:
Codice:
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.

Codice:
#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();
}
"This theorem, as many others, is proven by writing zero in a creative way…"
claudio86
Senior Member
Senior Member
 
Messaggio: 488 di 1130
Iscritto il: 09/01/2011, 15:12

Re: Dubbio su metodi statici

Messaggioda ZfreS » 13/07/2018, 19:13

Ahh, ora si che ho capito, grazie mille per l'aiuto!!
ZfreS
Cannot live without
Cannot live without
 
Messaggio: 675 di 4589
Iscritto il: 22/10/2016, 17:52


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite