Advertisement
jacknpoe

Objeto para Contagem Global (com metodo de classe [static])

Oct 8th, 2013
297
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.64 KB | None | 0 0
  1. /*
  2.  
  3. Objeto para Contagem Global (com método de classe via static)
  4.  
  5. Exemplo de como criar um objeto global para todos, via método de classe
  6. (definido com a palavra-chave static).   Dentro  deste  método  há  uma
  7. variável do tipo static que será global.
  8.  
  9. Toda chamada para o método de classe contagem::get_contagem() retorna o
  10. mesmo objeto (a não ser que ele não exista, então é criado).
  11.  
  12. */
  13.  
  14. #include <iostream>
  15. #include <stdio.h>
  16. #include <locale.h>
  17.  
  18. using namespace std;
  19.  
  20. class contagem {
  21.    private:
  22.       int contador;
  23.    public:
  24.       contagem();
  25.       ~contagem();
  26.       static contagem * get_contagem();
  27.       int get_contador();
  28.       void set_contador( int valor);
  29.       void inc_contador( int valor);
  30.       void inc_contador();
  31.       void dec_contador( int valor);
  32.       void dec_contador();
  33. };
  34.      contagem::contagem() { contador = 0; }  // abaixo, destrutor com depuração
  35.      contagem::~contagem() { cerr << "deletando contador: " << contador << "\n" ; }
  36. int  contagem::get_contador() { return contador; }
  37. void contagem::set_contador( int valor) { contador = valor; }
  38. void contagem::inc_contador( int valor) { contador += valor; }
  39. void contagem::inc_contador() { contador++; }
  40. void contagem::dec_contador( int valor) { contador -= valor; }
  41. void contagem::dec_contador() { contador--; }
  42.  
  43. contagem * contagem::get_contagem() {     // retorna um objeto contagem global
  44.    static contagem * _contagem; // esta variável é estática de um método de classe (global)
  45.    if( _contagem == NULL ) _contagem = new contagem;
  46.    return _contagem; }
  47.  
  48. int main( void) {  // para testes (nos comentários, os resultados esperados)
  49.    int foo;
  50.    contagem * Contagem1, * Contagem2;     // serão aliases, de facto
  51.  
  52.     setlocale( LC_ALL, "");     // equal caracters in prompt
  53.  
  54.    Contagem1 = contagem::get_contagem();
  55.    Contagem2 = contagem::get_contagem();
  56.    cout << Contagem1->get_contador() << "\n";      // 0
  57.    Contagem1->inc_contador();
  58.    cout << Contagem1->get_contador() << "\n";      // 1
  59.    Contagem2->inc_contador( 40);
  60.    cout << Contagem2->get_contador() << "\n";      // 41
  61.    Contagem2->dec_contador( 10);
  62.    cout << Contagem1->get_contador() << "\n";      // 31
  63.    Contagem1->dec_contador( );
  64.    cout << Contagem2->get_contador() << "\n";      // 30
  65.    Contagem2->set_contador( 1138);
  66.    cout << Contagem2->get_contador() << "\n";      // 1138
  67.    cout << "Compare os endereços dos objetos: "
  68.         << std::hex << Contagem2 << " " << Contagem1 << "\n" << std::dec ; // ?
  69.    delete Contagem1;        // cuidado com os aliases que vão restar aqui
  70.  
  71.    cout << "\nPressione enter para sair.";
  72.    scanf( "%c", &foo);
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement