Baixe o app para aproveitar ainda mais
Prévia do material em texto
Programação Orientada a Objetos em C++: Classes BCC702-Programação de Computadores II Emiliana Mara Lopes Simões simoes.eml@gmail.com Universidade Federal de Ouro Preto março 2010 Relembrando a aula passada... Vimos a definição da classe Circulo para representação de um círculo conforme definido na matemática Relembrando a aula passada... Definição da classe Circulo class Circulo{ private: float raio; float x, y; public: Circulo(); void mover(float deltaX, float deltaY); void aumentar(float deltaR); }; Arquivo: Circulo.h Relembrando a aula passada... Definição das funções da classe Circulo #include “Circulo.h” Circulo::Circulo(){ x = 0; y = 0; raio = 1; } void Circulo::mover(float deltaX, float deltaY){ x = x + deltaX; y = y + deltaY; } void Circulo::aumentar(float deltaR){ raio = raio + deltaR; } Arquivo: Circulo.cpp Relembrando a aula passada... Vimos os Modificadores de Acesso Membros de uma classe podem ser: public: Podem ser acessados em qualquer lugar private: Só podem ser acessados pelos membros da própria classe protected: Podem ser acessados apenas por membros da própria classe ou das suas sub-classes (será estudado mais adiante...) Relembrando a aula passada... Vimos os Modificadores de Acesso Membros de uma classe podem ser: public: Podem ser acessados em qualquer lugar private: Só podem ser acessados pelos membros da própria classe protected: Podem ser acessados apenas por membros da própria classe ou das suas sub-classes (será estudado mais adiante...) Relembrando a aula passada... Vimos os Modificadores de Acesso Membros de uma classe podem ser: public: Podem ser acessados em qualquer lugar private: Só podem ser acessados pelos membros da própria classe protected: Podem ser acessados apenas por membros da própria classe ou das suas sub-classes (será estudado mais adiante...) Relembrando a aula passada... Vimos os Modificadores de Acesso Membros de uma classe podem ser: public: Podem ser acessados em qualquer lugar private: Só podem ser acessados pelos membros da própria classe protected: Podem ser acessados apenas por membros da própria classe ou das suas sub-classes (será estudado mais adiante...) Modificadores de Acesso Exemplo: Tentativa de acesso a membros public e private fora da classe #include “Circulo.h” main(){ Circulo c1; //CORRETO: Chamada a um método público da classe Circulo c1.aumentar(10); //ERRADO! Tentativa de acessar um atributo privado de Circulo c1.raio = 3; } Modificadores de Acesso Modificadores de acesso podem ser usados tanto em atributos como em métodos O objetivo é: Proteger a integridade e a consistência dos dados e operações que uma determinada classe manipula Ocultar informações dos usuários da classe Modificadores de Acesso Modificadores de acesso podem ser usados tanto em atributos como em métodos O objetivo é: Proteger a integridade e a consistência dos dados e operações que uma determinada classe manipula Ocultar informações dos usuários da classe Modificadores de Acesso Modificadores de acesso podem ser usados tanto em atributos como em métodos O objetivo é: Proteger a integridade e a consistência dos dados e operações que uma determinada classe manipula Ocultar informações dos usuários da classe Modificadores de Acesso Modificadores de acesso podem ser usados tanto em atributos como em métodos O objetivo é: Proteger a integridade e a consistência dos dados e operações que uma determinada classe manipula Ocultar informações dos usuários da classe Métodos get e set São métodos usadas para acessar e modificar dados encapsulados da classe indiretamente get (obter o valor de) Serve para se ter acesso aos atributos encapsulados de uma classe set (atribuir valor a) Útil para permitir a modificação dos atributos da classe encapsulados Garante a integridade dos dados Métodos get e set São métodos usadas para acessar e modificar dados encapsulados da classe indiretamente get (obter o valor de) Serve para se ter acesso aos atributos encapsulados de uma classe set (atribuir valor a) Útil para permitir a modificação dos atributos da classe encapsulados Garante a integridade dos dados Métodos get e set São métodos usadas para acessar e modificar dados encapsulados da classe indiretamente get (obter o valor de) Serve para se ter acesso aos atributos encapsulados de uma classe set (atribuir valor a) Útil para permitir a modificação dos atributos da classe encapsulados Garante a integridade dos dados Exemplo: Métodos get e set para o atributo raio class Circulo{ private: float raio; float x, y; public: Circulo(); Circulo(float r); void setRaio(float r); float getRaio(); void mover(float deltaX, float deltaY); void aumentar(float deltaR); }; Arquivo: Circulo.h Exemplo: Definição dos métodos get e set para o atributo raio #include “Circulo.h” void Circulo::setRaio(float r){ if(r >= 0) raio = r; } float Circulo::getRaio(){ return raio; } ... Arquivo: Circulo.cpp Métodos get e set Exemplo: Alterando membro private utilizando o método set #include “Circulo.h” main(){ Circulo c1; //CORRETO: Chamada a um método público da classe Circulo //para alterar um atributo privado indiretamente c1.setRaio(3); } Arquivo: Main.cpp Métodos get e set Exemplo: Alterando membro private utilizando o método set #include “Circulo.h” main(){ Circulo c1; //Chamada correta de método, porém com valor não //permitido para o raio c1.setRaio(-5); } Arquivo: Main.cpp Métodos get e set Exemplo: Obtendo o valor de um membro private utilizando o método get #include “Circulo.h” main(){ Circulo c1; float x; //CORRETO: O valor do raio é retornado por um método get x = c1.getRaio(); } Arquivo: Main.cpp Exemplo IMPLEMENTAÇÃO DE CLASSES EM C++ Implementação da classe Data Exemplo: Criar uma classe para representar uma data qualquer no formato: dia/mês/ano As operações possíveis são: 1 Criar uma data; 2 Alterar uma data; 3 Imprimir uma data. Implementação da classe Data Exemplo: Criar uma classe para representar uma data qualquer no formato: dia/mês/ano As operações possíveis são: 1 Criar uma data; 2 Alterar uma data; 3 Imprimir uma data. Implementação da classe Data class Data{ public: Data(); Data(int d, int m, int a); void print(); void setData(int d, int m, int a); private: int dia; int mes; int ano; }; Arquivo: Data.h Implementação da classe Data #include “Data.h” #include <iostream> #include <iomanip> using namespace std; void Data::setData(int d, int m, int a){ //insere dia if(d > 0 && d <= 31) dia = d; else{ cout<<“Dia invalido. Transformado em 1”<<endl; dia = 1; } ... Arquivo: Data.cpp Implementação da classe Data ... //insere mês if(m > 0 && m <= 12) mes = m; else{ cout<<“Mes invalido. Transformado em 1”<<endl; mes = 1; } //insere ano if(a >= 0) ano = a; else{ cout<<“Ano invalido. Transformado em 0”<<endl; ano = 0; } } Arquivo: Data.cpp Implementação da classe Data Data::Data(){ setData(1, 1, 0); } Data::Data(int d, int m, int a){ setData(d, m, a); } void Data::print(){ cout<<setw(2)<<setfill(’0’)<<dia <<“/”<<setw(2)<<mes<<“/”<<ano<<endl; } Arquivo: Data.cpp Utilizando a classe Data no programa #include <iostream> #include “Data.h” using namespace std; main(){ //instanciando objetos sem e com argumentos Data d1; Data d2(22, 3, 2010); //imprimindo datas cout<<“Data d1: ”<<endl; d1.print(); cout<<“Data d2: ”<<endl; d2.print(); ... Arquivo: Main.cpp Utilizando a classe Data no programa ... //alterando data d2.setData(22, 7, 2010); cout<<“Data d2: ”<<endl; d2.print(); //alterando data com valor inválido para dia d2.setData(0, 7, 2010); cout<<“Data d2: ”<<endl; d2.print(); system(“PAUSE”); } Arquivo: Main.cpp Utilizando a classe Data no programa Saída: Data d1: 01/01/0 Data d2: 22/03/2010 Data d2: 22/07/2010 Dia inválido. Transformado em 1 Data d2: 01/07/2010 Press any key to continue... Composição: Objetos como membros de classe Uma classe pode ter objetos deoutras classes como membros. Essa capacidade é chamada de composição Exemplo: Definir a classe Empregado. Um empregado tem nome, sobrenome, data de nascimento e uma data de contratação A classe Data definida anteriormente pode ser usada!!! Composição: Objetos como membros de classe Uma classe pode ter objetos de outras classes como membros. Essa capacidade é chamada de composição Exemplo: Definir a classe Empregado. Um empregado tem nome, sobrenome, data de nascimento e uma data de contratação A classe Data definida anteriormente pode ser usada!!! Composição: Objetos como membros de classe #include “Data.h” #include <string> using namespace std; class Empregado{ public: Empregado(string n, string sn, int dn, int mn, int an, int dc, int mc, int ac); void print(); private: string nome; string sobrenome; Data dataNasc; Data dataContrat; }; Arquivo: Empregado.h Composição: Objetos como membros de classe #include “Empregado.h” #include <iostream> Empregado::Empregado(string n, string sn, int dn, int mn, int an, int dc, int mc, int ac){ dataNasc.setData(dn, mn, an); dataContrat.setData(dc, mc, ac); nome = n; sobrenome = sn; } Arquivo: Empregado.cpp Composição: Objetos como membros de classe void Empregado::print(){ cout<<“Nome: ”<<nome<<endl <<“Sobrenome: ”<<sobrenome<<endl <<“Data nascimento: ”; dataNasc.print(); cout<<“Data contratacao: ”; dataContrat.print(); } Arquivo: Empregado.cpp Composição: Objetos como membros de classe #include <iostream> #include “Empregado.h” using namespace std; main(){ Empregado e(“Fulano”, “de Tal”, 11, 9, 1979, 15, 10, 2000); e.print(); system(“PAUSE”); } Arquivo: Main.cpp Composição: Objetos como membros de classe Saída: Nome: Fulano Sobrenome: de Tal Data nascimento: 11/09/1979 Data contratacao: 15/10/2000 Press any key to continue... Composição: Objetos como membros de classe Modificando o construtor da classe Empregado adicionando uma lista de inicializadores de membros, para inicializar os atributos dataNasc e dataContract #include “Empregado.h” #include <iostream> Empregado::Empregado(string n, string sn, int dn, int mn, int an, int dc, int mc, int ac): dataNasc(dn, mn, an), dataContrat(dc, mc, ac) { nome = n; sobrenome = sn; } Dúvidas? Próxima Aula Apontadores
Compartilhar