{joseana, rangel}@dsc.ufcg.edu.br DSC/CCT/UFCG Prof.: José Eustáquio Rangel de Queiroz [email protected] [email protected] Carga Horária: 60 horas Classes DSC/CCT/UFCG Classe Similar a um tipo Struct, porém contendo variáveis-membros e funções-membros Structs Definição de variáveis Criação de funções “globais” para manipulação das variáveis {joseana, rangel}@dsc.ufcg.edu.br Classes Definição de variáveis e funções para manipulação dessas variáveis 2 Classes DSC/CCT/UFCG Struct x Class {joseana, rangel}@dsc.ufcg.edu.br struct Data{ int dia; int mes; int ano; }; class Data{ public: int dia; int mes; int ano; }; 3 DSC/CCT/UFCG Estruturas e Funções Globais #include <iostream> using namespace std; struct Data{ int dia; int mes; int ano; }; void lerData(Data &d){ cout << "Informe o dia: "; cout << "Informe o mes: "; cout << "Informe o ano: "; } cin >> d.dia; cin >> d.mes; cin >> d.ano; {joseana, rangel}@dsc.ufcg.edu.br void exibirData(Data &d){ cout << "Dia: " << d.dia << "\n"; cout << "Mes: " << d.mes << "\n"; cout << "Ano: " << d.ano << "\n"; } int main(){ Data d1; Acesso aos membros da estrutura a partir do operador ponto (.) variavelEstrutura.variavel lerData(d1); exibirData(d1); } system("PAUSE"); return 0; 4 DSC/CCT/UFCG Classes com Variáveis e Funções #include <iostream> using namespace std; {joseana, rangel}@dsc.ufcg.edu.br //Interface class Data{ public: int dia; int mes; int ano; void lerData(); void exibirData(); }; Acesso às funçõesmembros da classe a partir do operador ponto (.) Objeto.funcao-membro() //Aplicacao int main(){ //Funções-membros (ou metodos) void Data::lerData(){ cout << "Informe o dia: "; cin >> dia; cout << "Informe o mes: "; cin >> mes; cout << "Informe o ano: "; cin >> ano; } void Data::exibirData(){ cout << "Dia: " << dia << "\n"; cout << "Mes: " << mes << "\n"; cout << "Ano: " << ano << "\n"; } Data d1; d1.lerData(); d1.exibirData(); } system("PAUSE"); return 0; Acesso direto às variáveis da classe por suas funções-membros 5 DSC/CCT/UFCG Definição de Classes Definição de Classes {joseana, rangel}@dsc.ufcg.edu.br class Data{ public: int dia; int mes; int ano; void lerData(); void exibirData(); }; 6 DSC/CCT/UFCG Criação de e Acesso a Objetos Criação de objetos (instância de classes): Data d1, d2, d3; Acesso a dados de um objeto: {joseana, rangel}@dsc.ufcg.edu.br d1.dia = 30; d1.mes= 15; d1.ano = 2007; d1.lerData(); d1.exibirData(); 7 DSC/CCT/UFCG Implementação de funçõesmembros Definição dos protótipos de funções-membros dentro da classe class Data{ public: .. . {joseana, rangel}@dsc.ufcg.edu.br }; void lerData(); void exibirData(); 8 Implementação de funçõesmembros DSC/CCT/UFCG Implementar das funções-membros da classe Uso do operador de resolução de escopo ou qualificador de tipo (::) Associação da implementação da função a uma determinada classe Sintaxe: {joseana, rangel}@dsc.ufcg.edu.br tipo_retorno Classe::funcao-membro(){ .. . } void Data::lerData(){ .. . } void Data:: exibirData(){ .. . } 9 DSC/CCT/UFCG Acesso a Variáveis da Classe Funções-membros da classe acessam diretamente variáveis da classe Cada objeto tem seu próprio “estado” Valores assumidos pelas variáveis em um dado instante {joseana, rangel}@dsc.ufcg.edu.br void Data::exibirData(){ cout << "Dia: " << dia << "\n"; cout << "Mes: " << mes << "\n"; cout << "Ano: " << ano << "\n"; } Objetos acessam as variáveis e os métodos utilizando o operador ponto (.) Data d1; d1.dia = 30; d1.exibirData(); 10 Exercício 01 DSC/CCT/UFCG Dada a definição da classe DiaDoAno, implementar as funções-membro (métodos) e testar a classe. {joseana, rangel}@dsc.ufcg.edu.br class DiaDoAno{ public: int dia; int mes; void entrada(); void saida(); }; Entrada de dados Informação numérica, e.g., Digite o dia: 04, Digite o mês: 11 Saída de dados Apresentação em modo texto, e.g., Dia digitado: 04 de novembro 11 DSC/CCT/UFCG Exercício 02 Dada a definição da classe Temperatura, escrever uma definição apropriada para a função-membro converteTemp e testar a classe. {joseana, rangel}@dsc.ufcg.edu.br class Temp{ public: double graus; char escala; void converteTemp(double grau, char escala); }; 12 DSC/CCT/UFCG Exercício 03 Seja a classe Aluno com 4 variáveis de instância e 3 métodos: {joseana, rangel}@dsc.ufcg.edu.br Método lerDados() Lê os dados do aluno Método exibirDados() Apresenta em tela os dados do aluno Método computarMedia() Recebe como parâmetros 3 notas e retorna a média do aluno, acompanhada do status aprovado por média, reprovado por média ou na final. Implementar a classe e seus métodos e testar a classe. 13 Membros públicos e privados DSC/CCT/UFCG Criação de uma classe Possibilidade de definição de membros (variáveis e funções) públicos e privados Membros públicos Todas as variáveis e funções são visíveis aos objetos {joseana, rangel}@dsc.ufcg.edu.br Exemplo: d1.mes = 10; d1.lerData(); Acesso às variáveis e funções e possibilidade de alteração de seus valores Exemplo: Fornecimento (d1.mes = 15) de um dia inválido 14 Membros públicos e privados DSC/CCT/UFCG Criação de uma classe Possibilidade de definição de membros (variáveis e funções) públicos e privados {joseana, rangel}@dsc.ufcg.edu.br Membros privados Visibilidade das variáveis apenas dentro das funções da mesma classe Tratamento dos dados pelas funções Exemplo: Impedir a entrada de um mês inválido 15 Membros públicos e privados DSC/CCT/UFCG Exemplo 01 – Uso de membros públicos Acesso total a todos os campos e métodos Visibilidade {joseana, rangel}@dsc.ufcg.edu.br dos programadores class Data{ public: int dia; int mes; int ano; void lerData(); void exibirData(); }; campos da classe aos Data d1; d1.dia = 30; d1.mes = 15; d1.ano = 2007; d1.lerData(); d1.exibirData(); 16 DSC/CCT/UFCG Membros públicos e privados Exemplo 02 – Uso de membros privados Impossibilidade de acesso dos campos e funções na região privada da classe Acesso de todas as funções da classe aos campos e funções privados da classe Ocultação dos detalhes de implementação de uma {joseana, rangel}@dsc.ufcg.edu.br classe do programador que utiliza a classe Encapsulação dos dados class Data{ int dia; int mes; int ano; public: void lerData(); void exibirData(); }; Data d1; d1.dia = 30; d1.mes = 15; d1.ano = 2007; d1.lerData(); d1.exibirData(); 17 DSC/CCT/UFCG Joseana Macêdo Fechine José Eustáquio Rangel de Queiroz {joseana, rangel}@dsc.ufcg.edu.br {joseana, rangel}@dsc.ufcg.edu.br UNIVERSIDADE FEDERAL DE CAMPINA GRANDE CENTRO DE CIÊNCIAS E TECNOLOGIA DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO