C++
Home

Interação entre classes

Classes podem interagir entre si, objetos podem ter membros de outras classes.
Essa notação pode ser usada também com arquivos headers.
Para isso, no header da classe que irá usar uma classe já criada deve ser incluida a classe primaria.

Confira um exemplo de interação:

#include <iostream>

class jogador {
public:
   jogador( int );
   int imprimir();

private:
   int pontos;
};

jogador::jogador( int i )
{
   pontos = i;
}

int jogador::imprimir()
{
   return pontos;
}

class jogo {
public:
   jogo ( int, int ); // construtor!
   void imprimir();

private:
   int njogo;
   jogador jogo_atual; // Interação da classe jogador com a classe jogo, um tipo jogador como jogo_atual em jogo.

};

// a variavel pontos é ligada com o construtor de jogo_atual ( jogador )
// essa variavel vai receber um valor e será passado para a outra classe

jogo::jogo( int i, int pontos ) : jogo_atual( pontos )    // construtor com intereção
{
   njogo = i;
}

void jogo::imprimir()
{
   std::cout << "Numero do jogo: " << njogo << std::endl;
   std::cout << "Pontuação do jogo "<< njogo << ": " << jogo_atual.imprimir();
}

int main()
{
   jogo data1( 1, 100 );
   jogo data2( 2, 300 );

   data1.imprimir();
   data2.imprimir();

   std::cin;
   return 0;
}

Observe a linha
jogo::jogo( int i, int pontos ) : jogo_atual( pontos )    // construtor com intereção
Com essa notação, construtores que recebem variáveis podem ser iniciados
O objeto jogo neste caso é conhecido como objeto hospedeiro.

Vários tipos poderiam ser iniciados, bastando separa-los por virgula
jogo::jogo( int i, int pontos ) : jogo_atual( pontos ) , jogos_anterior( pontos )

O : no cabeçalho da função separa os inicializadores da lista de parâmetros.

Inicialize explicitamente objetos membro através de inicializadores de membros. Isto elimina o overhead da dupla inicialização de objetos membros.

Execute o programa e analize o resultado. Não se assuste, vamos ver mais a fundo essas operações.

 

Perguntas??? Email