390160-divisão_em_arquivos.pdf

9
Divisão em arquivos

Upload: gabriel-aparecido-fonseca

Post on 12-Sep-2015

212 views

Category:

Documents


0 download

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