AULA 8 - Programação II - Graduação

De IFSC
Revisão de 15h11min de 28 de março de 2018 por imported>Fargoud
Ir para navegação Ir para pesquisar

OBJETOS E FUNÇÕES

OBSERVAÇÕES SOBRE CLASSES

  • O modo de acesso default é o private (se o especificador de acesso for omitido).
  • Os dados privados podem ser alterados por funções externas à classe chamadas funções friend.
  • Se o objeto for criado como estático (Ex: static Horario HoraEstat; ) e possuir um Destrutor, este só será chamado com o término da execução do programa.
  • Cuidado para não permitir acesso indireto a membros privados - por referência!  viola o encapsulamento!

Exemplo:

class Horario 
{   	public: 	...
int & SetaHoraRuim(int, int, int);
 ...
 private:
   int hora, minuto, segundo; // atributos privados
 };
...
int & Horario::SetaHoraRuim(int h)
{       	hora = (h >= 0 && h < 24)? h:0;

return hora; // envia endereço de hora pra código cliente

}


Todo o conteúdo de um objeto pode ser atribuído a outro de mesmo tipo, através do operador “=“ ⇒ cópia membro-a-membro.

Exemplo:

class Data{ ...
public: Data (int=1,int=1,int=2000); //construtor default
...
};
...
Data data1(7,4,2001), data2;  // cria dois objetos
...
data2 = data1;   // cópia dos atributos de data1 para data2
...

EXERCÍCIO:

Implemente uma calculadora científica, que além das 4 operações é capaz de calcular e plotar as curvas: parabolóide (y = x^2), a exponencial (y = e^x) e a senoidal (y = sen x). Declare a classe Calculadora, com todos os seus atributos, coeficientes e métodos de cálculo e crie um código cliente que utilizará uma instância desta classe. DICA: para traçar os gráficos de saída você pode utilizar um componente TImage e as propriedades/métodos de Canvas, ou um componente pronto de gráficos da VCL do C++ Builder (como TChart).

OBJETOS CONSTANTES

O Objeto declarado com o modificador const não pode ter nenhum de seus atributos iniciais modificados.

Ex:

const Data Natal(25,12,2003);

Isto causa um problema: compilador nega-se a acessar também os métodos - para não alterar atributos do objeto. Para informar ao compilador que um método não altera atributos do objeto constante (e que pode ser, portanto, acessado): colocar o modificador const após os parênteses da função, no protótipo e no corpo do método!

Ex:

... public: 
              int bissexto( ) const { return (ano%4==0&&ano%100||ano%400==0; }

OBJETOS COMO ARGUMENTOS

Objetos podem ser argumentos de funções e mesmo de funções-membro da própria classe a que pertencem. Ex:

 #include <iostream>
 class Venda
 { private:   int Npecas; 
   float Preco;
   public:Venda() { }
   Venda(int np, float p) { Npecas = np; Preco = p; }
   void PegaVenda()
   { 	cout << “Insira no. de pecas: “; cin >>Npecas;
       cout << “Insira preco: “; cin>>Preco;  }
   void AdicionaVenda(Venda v1, Venda v2)
   { 	Npecas = v1.Npecas + v2.Npecas;
       Preco = v1.Preco + v2.Preco;   }
       void ImprimeVenda( ) const 
      {    cout << "Numero de pecas:" << Npecas<<endl;
           cout << “Total (R$): “ << Preco<< endl;  };
    }
   };		

Exemplo de saída:

int main( )
{ 	Venda A(58,12734.53), B, Total;
   B.PegaVenda( );
   Total.AdicionaVenda(A,B);
   cout << “Venda A .......... “;  A.ImprimeVenda( );
   cout << “Venda B ...........”;  B.ImprimeVenda( );
   cout << “\nTOTAL: ..........”; Total.ImprimeVenda( );
   return 0;
}

FUNÇÕES RETORNANDO OBJETOS:

No exemplo anterior, poderíamos modificar o método AdicionaVenda( ) para que este retornasse um objeto à main(), ao invés de modificar os atributos (e aí torna-se const também!). Ex: ...

   Venda AdicionaVenda(Venda v) const
   { 	Venda Aux;
     Aux.Npecas = Npecas + v.Npecas;
     Aux.Preco = Preco + v.Preco;   
     return Aux;   }
    ...
void main( )
{ 	Venda A(58,12734.53), B, Total;
    B.PegaVenda( );
    Total = A.AdicionaVenda(B);
...	}


Exemplo da aula de hoje:

Como abrir mais de um formulário no VC++ 2008 e como retornar uma string deste segundo formulário, contendo valores, para o formulário principal.

Classe Aluno

Aluno.h

Aluno h.png

Aluno.cpp

Aluno cpp.png


Formulário Principal - Form1

DESIGN

Form1dsg.png

CÓDIGO:


Formulário Secundário - Entradados

DESIGN

Form2dsg.png

CÓDIGO:

Form2cod.png