Você está na página 1de 9

Diviso em arquivos

Introduo
Quando se cria uma classe, no raro pretender que ela seja utilizada
por outras pessoas posteriormente.
Para esconder o cdigo, separamos a definio e a implementao,
utilizando, respectivamente, arquivos header (.h) e source (.cpp).
Boa prtica

Header
Nos arquivos header, coloca-se aquilo que define como uma classe
deve ser utilizada
Atributos
Cabealhos de funes
Etc

No so feitas referncias forma como as funes so


implementadas.
Exemplo: Classe Pais

Pais2.hpp
Observe que no incio do arquivo existem um #ifndef e o nome da
classe.
Suponhamos que existam duas classes de um mesmo programa e as
duas classes possuam um objeto da classe Pais
As duas classes devem ento, incluir o arquivo hpp

O problema que uma classe no pode ser includa mais de uma vez.
Problemas
varivel redeclarada,
e o compilador acusa um erro de Nome-davarivel redefined.

Para que isso no ocorra, cria-se uma flag que testa se o arquivo j foi includo.

Pais.hpp
Utilizando o ifndef o cdigo da declarao executado apenas 1 vez.
Este um detalhe bastante importante
Praticamente impossvel levar adiante projetos grandes sem a utilizao
dessas flags.
Nos arquivos fonte (.cpp), deve ser colocado aquilo que o usurio da classe
no deve ver, ou seja, a implementao das funes membro.
No esquea de incluir o arquivo header, para que o arquivo possa enxergar
as definies.
fundamental adicionar Nome-da-classe:: antes dos nomes de funo, para
que o compilador saiba que se trata de uma funo da respectiva classe.

Pais2.hpp
#ifndef __PAIS2_HPP // se o header no est definido

Pais2();

#define __PAIS2_HPP // define o header

int getCont();

#include <string>

int setCont();

using namespace std;

string getNome();

string getNomeCapital();
class Pais2

string * getListaPais();

void verificarSePaisEIgual(Pais2 x);


static int cont;

void verificarFronteiras();

private:

void verificaVizinhosComuns(Pais2 x);


string nome, nomeCapital;

};

double dimensao;

string listaPais[5];

int Pais2::cont;

Pais2(string n, string nc, double dim, string lp[5]);

#endif

public:

Pais2.cpp
#include <iostream>
#include <string>
#include <math.h>
#include "pais2.hpp"

using namespace std;

Pais2::Pais2(string n, string nc, double dim, string lp[5])


{
nome = n;
nomeCapital = nc;
dimensao = dim;

for (int i=0;i<5;i++)


{
listaPais[i]=lp[i];
}

cont++;
}

Pais2.cpp
Pais2::Pais2()

{
nome="";

string Pais2::getNome()

nomeCapital="";

dimensao = 0;
listaPais[0]="Uruguai";

return nome;
}

cont++;
}

string Pais2::getNomeCapital()

{
int Pais2::getCont()
{

return nomeCapital;
}

return cont;
}

string * Pais2::getListaPais()
{

int Pais2::setCont()
{

return listaPais;
}

this->cont=cont;

Pais2.cpp
void Pais2::verificarSePaisEIgual(Pais2 x)

string *y = x.getListaPais();

if ((x.getNome()== nome) and


(x.getNomeCapital() == nomeCapital))

int cont = 1;
cout << "\n\nVizinhos comuns: ";

for (int i=0;i<5;i++)

cout << "Paises Iguais";

for (int j=0;j<5;j++)

} else cout << "So diferentes";

if (listaPais[i]==y[j])
{

void Pais2::verificarFronteiras()

cout<<"\n("<<cont<<")"<<listaPais[i];
for (int i=0;i<5;i++)

cont++;

}
cout << "\n ["<<i<<"] = " +

listaPais[i];
}
}

void Pais2::verificaVizinhosComuns(Pais2 x)

}
}

Você também pode gostar