PUCRS
Programação de Software Básico
Faculdade de Informática


Referência Cruzada entre Classes



Se em algum momento for necessário referenciar uma classe ClasseA de dentro de uma classe ClasseB que já tem uma referência à classe ClasseA, a simples inclusão do arquivo do cabeçalho de ClasseA no arquivo de cabeçalho de ClasseB e vice-versa fará o compilador entrar em loop.

Para resolver este problema, faça conforme o exemplo abaixo. Neste exemplo a classe cpessoa tem uma referência à classe cconta.

// ******************************************
// Classe CONTA  / Cabeçalho
// ******************************************
#ifndef h_conta
#define h_conta
#include <iostream>

using std::string;

#include "cpessoa.h" 

class cpessoa;

class cconta {

    int nro;
    float saldo;

    string tipo;
    cpessoa  *ptrPessoa; // referência à pessoa
   public:

    cconta();
    cconta(int n);

    void inicializa();
    void setNro(int n);
    void deposita(float v);
    int saca(float v);
    float informaSaldo();
    void imprime();
};

#endif
// ******************************************
// Classe CPESSOA / cabeçalho
//
//
// ******************************************
#ifndef h_pessoa
#define h_pessoa
#include <iostream>

using std::string;

#include "cconta.h"

class cconta;

class cpessoa {

    string nome;
    int idade;
    cconta *ptrConta; // referencia à conta

    public:

    cpessoa();
    cpessoa(string n, int id);
    void setNome(string nome);

};

#endif