Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [c++] Static

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    152

    [c++] Static

    Salve!!

    Qualcuno può spiegarmi , per favore, il significato dello specificatore static davanti al metodo di una classe??

    Grazie
    andry80

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    static serve per la comunicazione ad ambiente condiviso, ovvero un membro static è lo stesso per ogni istanza, un po come se ci fosse un membro e un puntatore in ogni istanza che punta allo stesso spezio di memoria.

    Quando si crea un metodo static lo si vincola a poter accedere solo a variabili static e non avrà bisogna di sapere a quale oggetto riferisce quindi(dato che i membri statici sono condivisi da tutte le istanze).

    Facendo qualche ricerca si trovano anche ivantaggi nel dichiarare un metodo statico:

    maggiore controllo su possibili fonti di errore: dichiarando un metodo static, chiediamo al compilatore di accertarsi che il metodo non acceda ad altre categorie di attributi;
    minor overhead di chiamata: i metodi non static per sapere a quale oggetto devono riferire, ricevono dal compilatore un puntatore all'istanza di classe per la quale il metodo e` stato chiamato; i metodi static per loro natura non hanno bisogno di tale parametro e quindi non richiedono tale overhead;
    i metodi static oltre a poter essere chiamati come un normale metodo, associandoli ad un oggetto (con la notazione del punto), possono essere chiamati come una normale funzione senza necessita` di associarli ad una particolrare istanza, ricorrendo al risolutore di scope.
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Piccolo esempio:
    codice:
    include "iostream"
    using nomespace str;
    
    int f(void);//prototipo
    
    main() {
       cout<<f();//stampa 1
       cout<<f();//stampa 2
       cout<<f();//stampa 3
    
       return 0;
    }
    
    int f(void){
       static aNumber = 0;
     
       return ++aNamber;
    }
    Una volta in esecuzione il programma la variabile aNumber esiste prima che venga invocata f()(il compilatore assegna per default 0) e alla prima chiamata prende il valore di inizializzazione fornito dall'assegnamento all'interno di f(). Le successive chiamate ad f() incrementano aNumber di un unita'(++ preincremento) in fase di restituzione della funzione, ma incrementa la variabile precedentemente incrementata, quindi lavariabile aNumber ha una permanenza statica nella memoria(quindi non e' una variabile automatica che viene distrutta all'uscita di f()).
    Da questo ragionamento di base si arriva anche alle nozioni piu' complese rendendo statiche anche delle classi.
    Ciao
    Nulla, ma e' sempre qualcosa.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.