390160-divisão_em_arquivos.pdf
TRANSCRIPT
-
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
#define __PAIS2_HPP // define o header
#include
using namespace std;
class Pais2
{
static int cont;
private:
string nome, nomeCapital;
double dimensao;
string listaPais[5];
public:
Pais2(string n, string nc, double dim, string lp[5]);
Pais2();
int getCont();
int setCont();
string getNome();
string getNomeCapital();
string * getListaPais();
void verificarSePaisEIgual(Pais2 x);
void verificarFronteiras();
void verificaVizinhosComuns(Pais2 x);
};
int Pais2::cont;
#endif
-
Pais2.cpp#include
#include
#include
#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
-
Pais2.cppPais2::Pais2()
{
nome="";
nomeCapital="";
dimensao = 0;
listaPais[0]="Uruguai";
cont++;
}
int Pais2::getCont()
{
return cont;
}
int Pais2::setCont()
{
this->cont=cont;
}
string Pais2::getNome()
{
return nome;
}
string Pais2::getNomeCapital()
{
return nomeCapital;
}
string * Pais2::getListaPais()
{
return listaPais;
}
-
Pais2.cppvoid Pais2::verificarSePaisEIgual(Pais2 x)
{
if ((x.getNome()== nome) and(x.getNomeCapital() == nomeCapital))
{
cout