Capitulo 03 - Introdução a Classes e Objetos

Neste capítulo veremos como criar uma classe função-membro para o exemplo de uma classe de um livro de notas para o calculo das notas dos alunos que tiraram nas provas, mais a frente veremos novamente em Arrays e Vetores no Capitulo 07.

Obs: os exemplos dos programas a seguir algumas de suas variáveis estão em portugues para melhor entendimento.

Exemplo 01:

//figura 3.1: ClassNotasLivro.cpp
#include <iostream>

using  std::cout;
using  std::endl;

//definiao da classe NotasLivro
class NotasLivro
{
    public:
         //funcao que exibe uma mensagem de boas vindas ao usuario do NotasLivro
         void telaMensagem()
         {
              cout << "Bem vindo a Notas Livro!" << endl;
         }
};

//a funcao main inicia a execucao do programa
int main()
{
    NotasLivro minhaNotasLivro;       //cria um objeto NotasLivro chamado minhaNotasLivro
    minhaNotasLivro.telaMensagem();   //chama a funcao telaMensagem do objeto
    return 0;
}

No exemplo 01 do programa ClassNotasLivro vemos que dentro da classe NotasLivro criamos a classe como public e dentro dela uma função chamada telamensagem no qual dentro da função int main, a função telaMensagem () será chamada pela classe minhaNotasLivro
e depois de compilado ficará assim na tela:







Exemplo 02:



//figura 3.3: ClassNotasLivro1.cpp
#include <iostream>
#include <string>     //o programa utiliza classe de string padrao C++

using  std::string;
using  std::cout;
using  std::endl;

//efinicao da classe NotasLivro
class NotasLivro
{
      public:
          //funcao que exibe uma mensagem de boas vindas ao usuario do NotasLivro
          void telaMensagem(string nomeCurso)
          {
              cout << "Bem vindo ao notas livro\n" <<nomeCurso << "!" << endl;
          }
};

//a funcao main inicia a execucao do programa
int main()
{
    string nomeDoCurso;        //strings de caracteres para armazenar o nome do curso
    NotasLivro minhaNotasLivro;             //cria um objeto Notaslivro chamado minhaNotasLivro


    //prompt para entrada do nome do curso
    cout << "Por favor entre com o nome do curso:" << endl;
    getline(cin, nomeDoCurso);   //le o nome de um curso com espacos em branco
    cout << endl;


    //chama a funcao telaMensagem de minhaNotasLivro
    //e passa nomeDoCurso com um argumento
    minhaNotasLivro.telaMensagem(nomeDoCurso);
    return 0;

}

No exemplo 02 do programa ClassNotasLivro1 definimos a classe NotasLivro1 com uma função que aceita um parâmetro. Dentro de telaMensagem foi declara uma string do nome do curso no qual sera lida com cout entro da função void telaMensagem() chamando nomeCurso que depois de compilado ficara assim na tela:





Exemplo 03:

//Figura 3.5: ClassNotasLivro2.cpp
#include <iostream>
#include <string>

using  std::string;
using  std::cout;
using  std::endl;

class NotasLivro
{
     public:
          //funcao que configura o nome do curso
          void setNomeCurso(string nome)
          {
              nomeCurso = nome;  //armazena o nome do curso no objeto
          }

          //funcao que obtem o ome do curso
          string getNomeCurso()
          {
              return nomeCurso;
          }

          //mensagem de boas vindas
          void telaMensagem()
          {
              /*
              essa instrucao chama getNomeCurso para obter o
              nome do curso que esse NotasLivro representa
              */
              cout << "Bem vindo a Notas Livro\n" << getNomeCurso() << "!" << endl;

          }


     private:
          string nomeCurso;

};

int main()
{
    string nomeDoCurso;             //string par armazenar o nome do curso
    NotasLivro minhaNotasLivro;     //cria um objeto chamado   minhaNotasLivro

    cout << "\nPor favor entre com o nome do curso:" << endl;
    getline(cin, nomeDoCurso);            //le o nome de um curso com espacos em branco
    minhaNotasLivro.setNomeCurso(nomeDoCurso);     //cofigura o nome do curso

    cout << endl;                                          //gera saida de linha em branco
    minhaNotasLivro.telaMensagem();      //exibe  a mensagem com o novo nome do curso
    return 0;

}

No exemplo do programa ClassNotasLivro2  Define Instanciando multiplos objetos da classe NotasLivro e utilizando o construtor NotasLivro para especificar o nome do curso quando cada objeto NotasLivro é criado.
e ao mandar compilar o aparecera dessa forma a mensagem:





Exemplo 04:



 //figura 3.7: ClassNotasLivro3.cpp
 #include <iostream>
 #include <string>

using namespace
std;

class NotasLivro
{
     public:
          //o construtor inicializa nomeCurso com a string fornecida como argumento
          NotasLivro(string nome)
          {
              setNomeCurso(nome);    //chama a funcao ser para inicializar nomeCurso
          }

          //funcao que configura o nome do curso
          void setNomeCurso(string nome)
          {
              nomeCurso = nome;  //chama a funcao set para inicializar nomeCurso
          }

          //funcao que obtem o nome do curso
          string getNomeCurso()
          {
              return nomeCurso; //retorna nomeCurso do objeto
          }

          //mensagem de boas vindas
          void telaMensagem()
          {
              /*
              essa instrucao chama getNomeCurso para obter o
              nome do curso que esse NotasLivro representa
              */
              cout << "Bem vindo a Notas Livro\n" << getNomeCurso() << "!" << endl;

          }


     private:
          string nomeCurso; //nome do curso para esta NotasLivro

};

int main()
{
    //cria dois objetos NotasLivro
    NotasLivro notasLivro1("C Como Programar");
    NotasLivro notasLivro2("C++ Como Programar");

    //exibe valor inicial de nomeCurso para cada NotasLivro
    cout << "notasLivro1 curso criado: " << notasLivro1.getNomeCurso()
         << "\nnotasLivro2 curso criado: " << notasLivro2.getNomeCurso()
         << endl;
    return 0;

}

No exemplo do programa ClassNotasLivro3 Instanciamos multiplos objetos da classe NotasLivro e utilizando o construtor NotasLivro para especificar o nome do curso
quando cada objeto NotasLivro é criado. Depoois de compilado a mensagem que aparecera na tela sera essa:






Exemplo 5:


 //figura 3.9: NotasLivro4.h
#include <iostream>
#include <string>

using  std::string;
using  std::cout;
using  std::endl;

class NotasLivro
{
      public:
           //o construtor inicializa nomeCurso com a strigng fornecida como argumento
           NotasLivro(string nome)
           {
               setNomeCurso(nome);
           }

           //funcao para configurar o nome do curso
           void setNomeCurso(string nome)
           {
               nomeCurso = nome;  //armazena o nome do curso no objeto
           }

           //funcao para obter o nome do curso
           string getNomeCurso()
           {
               return nomeCurso;  //retorna nomeCurso do objeto
           }

           //exibe uma mensagem de boas-vindas para o usuario NotasLivro
           void telaMensagem()
           {
               //chama getNomeCurso para obter o nomeCurso
               cout << "Bem-vindo a NotasLivro\n" << getNomeCurso()
                    << "!" << endl;
           }


      private:
           string nomeCurso; //nome do curso para esse NotasLivro

};


Exemplo 06:

//Figura 3.10: NotasLivro4Main.cpp
#include <iostream>
#include "NotasLivro4.h"

using namespace std;

int main()
{
    //cria 2 objetos NotasLivro
    NotasLivro notasLivro1("Curso Logica de Programacao");
    NotasLivro notasLivro2("Curso Algoritmos e Logica de Programacao em C, Pascal e Java");

    //exibe o valor inicial de nomeCuros para cada NotasLivro
    cout << "notasLivro1 criado nome do curso: " << notasLivro1.getNomeCurso()
         << "\nnotasLivro2 criado nome do curso: " << notasLivro2.getNomeCurso()
         << endl;

    return 0;

}

Criamos a classe NotasLivro.h em um arquivo separado para ser chamado dentro do programa NotasLivro.cpp no qual usa a biblioteca #include "NotasLivro.h" sem essa biblioteca o programa nao seria executado e daria um erro no qual não encontraria a classe NotasLivr, quando executado o programa aparecera impresso na tela as duas mensagens do objeto notasLivro1 e notasLivro2:



Exemplos 07, 08 e 09:

//figura 3.11: NotasLivro5.h

#include <string>

using  std:string;

class NotasLivro
{
      public:

           NotasLivro(string);   //o construtor inicializa nomeCurso
           void setNomeCurso(string);    //funcao para configurar o nome do curso
           string getNomeCurso();             //funcao para obter o nome do curso
           void telaMensagem();              //exibe uma mensagem de boas-vindas

      private:
           string nomeCurso; //nome do curso para esse NotasLivro

};

Definicao de classe NotasLivro5. Esse arquivo apresenta a interface publica de
NotasLivro5.h sem revelar as implementacoes de funcao-membro de NotasLivro
que sao definidas em NotasLivro5Main.cpp




//Figura 3.12: NotasLivro5.cpp
#include <iostream>
#include "NotasLivro5.h"

using  std::cout;
using  std::endl;


//o construtor inicializa nomeCurso com a string fornecida como argumento
NotasLivro::NotasLivro(string nome)
{
    setNomeCurso(nome); //chama a funao set para inicializar nomeCurso
}

//funcao para configurar o nome do curso
void NotasLivro::setNomeCurso(string nome)
{
    nomeCurso = nome;  //armazena o nome do curso no objeto
}

//funcaom para obter o nome do curso
string NotasLivro::getNomeCurso()
{
    return nomeCurso; //retorna nomeCurso do objeto
}

//exibe uma mensagem de boas-vindas para o usuario NotasLivro
void NotasLivro::telaMensagem()
{
    //chama getNomeCurso para obter o nomeCurso
    cout << "Bem vindo a NotasLivro:\n" << getNomeCurso()
         << "!" << endl;
}


No exemplo do programa tem definicoes de funcao-membro de NotasLivro5. Esse arquivo contem implementacoes das funcoes-membro prototipadas em NotasLivro5.h.



//figura 3.13: NotasLivro5Main.cpp
#include <iostream>
#include "NotasLivro5.cpp"


using  std::cout;
using  std::endl;

int main()
{
    //cria 2 objetos NotasLivro
    NotasLivro notasLivro1("Curso Logica de Programacao");
    NotasLivro notasLivro2("Curso Algoritmos e Logica de Programacao em C, Pascal e Java");

    //exibe o valor inicial de nomeCuros para cada NotasLivro
    cout << "notasLivro1 criado nome do curso: " << notasLivro1.getNomeCurso()
         << "\nnotasLivro2 criado nome do curso: " << notasLivro2.getNomeCurso()
         << endl;

    return 0;

}

No exemplo deste programa vemos a demonstração de classe NotasLivro5 depois de separar sua interface de sua implementação. executando o programa mostrará a mensagem na tela:




Exemplos 10, 11 e 12:

//figura 3.15: NotasLivro6.h
#include <iostream>
#include <string>


using std::string;

class NotasLivro
{
      public:

           NotasLivro(string);   //o construtor inicializa nomeCurso
           void setNomeCurso(string);    //funcao para configurar o nome do curso
           string getNomeCurso();             //funcao para obter o nome do curso
           void telaMensagem();              //exibe uma mensagem de boas-vindas

      private:
           string nomeCurso; //nome do curso para esse NotasLivro

};

Definição de classe NotasLivro6. Esse arquivo apresenta a interface publica da
classe. Definições de função-membro aparecem em NotasLivro6.cpp



//figura 3.16: NotasLivro6.cpp

#include <iostream>


using  std::cout;
using  std::endl;

//o construtor inicializa nomeCurso com a string fornecida como argumento
NotasLivro::NotasLivro(string nome)
{
    setNomeCurso(nome); //valida e armazena nomeCurso
}

//funcao para configurar o nome do curso
//assegura que o nome do curso tenha no maximo 25 caracteres
void NotasLivro::setNomeCurso(string nome)
{
    if(nome.length() <= 25)  //se o nome tiver 25 ou menos caracteres
       nomeCurso = nome;     //armazena o nome do curso e do objeto

    if(nome.length() > 25)   //se o nome tiver mais de 25 caracteres
    {
        //confiura nomeCurso como os primeiros 25 caracteres do parametro nome
        nomeCurso = nome.substr(0, 25); //inicia em 0, comprimento de 25
        cout << "Nome \"" << nome << "\" excede o comprimento maximo (25).\n"
             << "Limitando nomeCurso nos primeiros 25 caracteres.\n" << endl;

    }  //fim do if

}  //fim da funcao setNomeCurso

//funcaom para obter o nome do curso
string NotasLivro::getNomeCurso()
{
    return nomeCurso; //retorna nomeCurso do objeto
}

//exibe uma mensagem de boas-vindas para o usuario NotasLivro
void NotasLivro::telaMensagem()
{
    //chama getNomeCurso para obter o nomeCurso
    cout << "Bem vindo a NotasLivro:\n" << getNomeCurso()
         << "!" << endl;
}


Definições de função-membro de NotasLivro6. Esse arquivo contem
implementações das funções-membro prototipadas em NotasLivro5.h.



//figura 3.17: NotasLivro6Main.cpp
#include <iostream>
#include "NotasLivro6.h"
#include "NotasLivro6.cpp"


using std::cout;
using std::endl;

int main()
{
    //cria 2 objetos NotasLivro
    //nome inicial de curso de notasLivro1 é muito longo
    NotasLivro notasLivro1("Curso Oracle Database");
    NotasLivro notasLivro2("Curso Algoritmos e Logica de Programacao C, Pascal e Java");

    //exibe o valor inicial de nomeCuros para cada NotasLivro
    cout << "notasLivro1 nome do curso inicial: " << notasLivro1.getNomeCurso()
         << "\nnotasLivro2 nome do curso inicial: " << notasLivro2.getNomeCurso()
         << endl;


    //modifica nomeCurso da minhaNotasLivro (como uma string de comprimentyo valido)
    notasLivro1.setNomeCurso("Curso de Pascal e Java");


    //exibe o nomeCurso de cada NotasLivro
    cout << "notasLivro1 nome do curso: " << notasLivro1.getNomeCurso()
         << "\nnotasLivro2 nome do curso: " << notasLivro2.getNomeCurso()
         << endl;

    return 0;

}

Cria e manipula um objeto NotasLivro6; ilustra a validação. Executando o programa, uma mensagem ira ser mostrada na tela:




Aqui terminamos o Capitulo 03 de Introdução a classes e objetos

ate a proxima

Comentários

Postagens mais visitadas