Classes C++ Class nome da classe { private: membros privados

Slides:



Advertisements
Apresentações semelhantes
ABSTRAÇÃO processo de representar um grupo de entidades através de seus atributos comuns feita a abstração, cada entidade particular (instância) do grupo.
Advertisements

C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Um programa em C Bibliotecas Variáveis globais
V Procedimentos – são estruturas que agrupam um conjunto de comandos, que são executados quando o procedimento é chamado. v Funções – são procedimentos.
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 3 – Introdução às classes Capitulo 3 Introdução às classes.
List templates Vamos considerar a lista ligada (singly linked list) O objecto da classe slink O objecto da classe slink O objecto da classe slink NULL.
1. Classes 2. Membros estáticos 1.1. Palavra chave this
Struct slink { slink* next; slink() { next=0; } slink(slink* p) { next=p; } virtual void print_me() = 0; }; next função virtual pura 1º constructor 2º
Iniciação ao Java – Márcio F. Campos
Polimorfismo e Acoplamento Dinâmico
INF Computação Gráfica
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
UDESC - Prof. Juliano Maia
Orientação a Objetos Classes
Universidade Federal do Espírito Santo Programação II Vetores Professora: Norminda Luiza.
7 Abstração Genérica Unidades genéricas e instanciação.
Paradigmas da Programação – Semestre 1 – Aula 3
Centro Integrado de Tecnologia da Informação
Armazenamento de Dados em Arquivos
Slides: Prof. João Fabro UTFPR - Curitiba
Aula 8 Polimorfismo.
1 Aula 7 Herança. 2003/2004 Programação Orientada para Objectos 2 Conceitos fundamentais: Herança Polimorfismo Ligação dinâmica.
Classes & Objectos em JAVA5
Classes e objetos P. O. O. Prof. Grace.
CRIANDO OBJETOS EM JAVA
exercícios listas encadeadas
Introdução a Estruturas de Dados Avançadas Utilizando Linguagem C
APRESENTAÇÃO: DAVID ANDERSON CARDOSO DANTAS CURSO DE C AULA 04: Funções Maceió, Maio de 2010.
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Vetores em c / c++: Formato geral para declaração de variáveis:
Classes Revisando: –Forma de implementação de estruturas específicas –Atributos (grupos de dados) –Métodos (conjuntos de procedimentos)
JAVA Orientação a Objetos
Metaprogramação – API Reflection da linguagem Java
Linguagem de Programação II
Atributos, Encapsulamento e Interface em Java
Programação II Estruturas de Dados Aula 02 - continuação
Programação I Aula 2 (Métodos)
Prof. Ricardo Santos PONTEIROS
Paradigmas e Ferramentas de Desenvolvimento de Software – Revisão da linguagem C++ Lúbia Vinhas DPI - INPE.
Tipos Abstratos de Dados
Introdução à Programação Orientada a Objetos com Java Paulo Borba Centro de Informática Universidade Federal de Pernambuco Programação Imperativa (e Ponteiros.
if669 - Introdução à Programação
Programação orientada a objectos em C++
Laboratório I Mateus Raeder. Mateus Raeder – fevereiro de 2009 Sobrecarga de métodos  Definição de métodos visibilidade tipo de retorno nome do método.
Universidade Católica de Angola Prática de laboratório Fundamentos de Programação II Frei Joaquim José Hangalo.
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Classes Abstratas P. O. O. Prof. Ângela e Grace.
Aula Prática 4 Monitoria IP/CC (~if669).
 São utilizadas para dividir um código maior (mais complexo) em partes menores (mais simples).  Quando uma mesma tarefa é realizada várias vezes em um.
Herança e Polimorfismos
Estruturas de Dados Aula 6: Cadeias de Caracteres
Programação II Prof. Mateus Raeder Universidade do Vale do Rio dos Sinos - São Leopoldo -
Construtores e Destrutores
Aula Prática 5 Monitoria IP/CC (~if669). Roteiro 1. 1.Recursão 2. 2.Escopo de Variáveis 3. 3.Arrays 4. 4.Strings.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
PCI- Registros Profa. Mercedes Gonzales Márquez. Conceito Variáveis compostas heterogêneas (não homogêneas) Estruturas: variáveis que podem conter uma.
Bruno Inojosa MCP .NET Framework
DSC/CCT/UFCG {joseana, Carga Horária: 60 horas Prof.: José Eustáquio Rangel de Queiroz
Associação. 2 Desafio – Aula class Aluno { 2. private String nome; 3. private float nota; 4. public Aluno(String nome, float nota){ 5. this.nome.
Programação Orientada a Objetos para Redes de Computadores Prof. Miguel Elias Mitre Campista POO para Redes de Computadores.
Implementação Orientada a Objetos – Aula 04 Métodos, parâmetros e retorno Prof. Danielle Martin/Marcia Bissaco Universidade de Mogi das Cruzes
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Computação – Informática Aula N. 05 Prof. SIMÃO Jean Marcelo SIMÃO Linguagem C “Matrizes em C”
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ PAE: Pedro Shiguihara Professor: Dilvan Moreira.
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
Fundamentos de Programação 1
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Orientação a Objetos - Programação em C++
Transcrição da apresentação:

Classes C++ Class nome da classe { private: membros privados Declaração de Classes Class nome da classe { private: membros privados protected: membros protegidos public: membros públicos }; Declaração de métodos fora da estrutura da classes [Tipo_retorno] nome_classe :: nome_método([parametros]) { código do método } ADA / DEI - ISEP 2001/2000

Exemplo de uma Classe C++ Interface (circulo.h) Implementação (circulo.cpp) #include <iostream.h> class circulo { private: int coordx; int coordy; int raio; char * cor;   public: circulo(); circulo(int x,int y,int r,char *c); ~circulo(); void listar(); }; circulo::circulo() { coordx=0; coordy=0; raio=0; cor=NULL; }; circulo::circulo(int x,int y,int r,char *c) { coordx=x; coordy=y; raio=r; cor=new char[strlen(c) +1]; strcpy(cor , c); circulo::~circulo() { if (cor !=(char*)0) delete cor; void circulo::listar() { cout<<"cordenada x="<<coordx<<'\n'; cout<<"cordenada y="<<coordy<<'\n'; cout<<"raio="<<raio<<'\n'; cout<<"cor="<<cor<<'\n'; void main() { circulo c1; circulo c2(10,15,33,"Azul"); c1.listar(); c2.listar(); } ADA / DEI - ISEP 2001/2000

Funções (Métodos) e Parâmetros PARÂMETROS VALOR - A passagem de parâmetros por valor invoca o construtor cópia do tipo de dados do parâmetro formal. Quando uma função termina destrutores dos tipos de dados dos parâmetros formais "destroem" os valores desses parâmetros. int f1(int x); // x parâmetro valor PARÂMETROS REFERÊNCIA - Os parâmetros actuais são ligados aos parâmetros formais, não existe cópia dos parâmetros. O nome dos parâmetros formais substitui o nome dos parâmetros actuais. Qualquer alteração do parâmetro formal, altera o parâmetro actual. int f2(int& y); // y parâmetro referência PARÂMETROS REFERÊNCIA CONSTANTE - Neste caso o parâmetro formal substitui o actual, mas como é constante, não admite alteração de valor. int f3(const int& z) // z parâmetro referência constante ADA / DEI - ISEP 2001/2000

Construtores O construtor serve normalmente para inicializar os membros-dados O construtor é invocado automaticamente sempre que é criado um objecto da classe Construtores também podem ser invocados explicitamente circulo(); circulo(int x, int y, int r, char *c ); circulo(int x=0, int y=0, int r=5, char * c="azul“ ) circulo::circulo (const circulo &c) { raio=c.raio; coordx=c.coordx; coordy=c.coordy; cor= new char [strlen(c.cor)+1] ; strcpy(cor,c.cor); }; ADA / DEI - ISEP 2001/2000

Destrutor Tem a mesma designação da classe precedido de ~ Não tem parâmetros e não devolvem quaisquer valores Não são invocados explicitamente. São invocados automaticamente sempre o objecto deixa de existir. Destrutores servem normalmente para libertar recursos (memória dinâmica, etc.) associados ao objecto. circulo::~circulo() { delete [ ] cor; } ADA / DEI - ISEP 2001/2000

Sobrecarga de Operadores Permite rescrever código para operadores de modo a manipularem operandos de classe diferente da que estão predefinidos. Não é possível alterar a precedência nem o número de operandos. circulo circulo::operator +( const circulo& c) { circulo temp; temp.coordx=this->coordx; temp.coordy=this->coordy; tem.raio=this->raio + c.raio; return temp; } ADA / DEI - ISEP 2001/2000

Relação "IS-A" e Herança Muitas vezes, conceptualmente, um objecto de uma classe também é um objecto doutra classe (relação IS-A) Um aluno é uma pessoa e um objecto da classe Aluno é também um objecto da classe Pessoa Nesse caso, herda as propriedades definidas para a segunda classe (relação de herança) Aluno herda as propriedades de Pessoa (atributos e funções como nome, idade, etc.) podendo acrescentar outras propriedades (curso, média, etc.) Notação : clase Pessoa {/*prop's comuns a todas as pessoas*/}; class Aluno : public Pessoa {/*prop's especificas*/}; Pessoa é uma classe base (ou superclasse) para Estudante e Estudante é uma classe derivada (ou subclasse ou subtipo) de Pessoa Objectos da classe derivada podem ser tratados como objectos da classe base (desde que manipulados através de apontadores ou referências) ADA / DEI - ISEP 2001/2000

Exemplo com classe derivada Um Aluno é (is-a) uma Pessoa class Pessoa { protected: string nome; Data dataNascimento; public: Pessoa(string, Data); string getNome() const; Data getDataNascimento() const; int getIdade() const; void setNome(string); void setDataNascimento(Data); void imprime() const; }; class Aluno : public Pessoa { protected: string curso; public: Aluno( string nm, Data, string crs); string getCurso() const; void setCurso(string); void imprime() const; }; ADA / DEI - ISEP 2001/2000

Resumo de extensões ao C! Comentários começados em // (vão até ao fim da linha). Definição de variáveis a meio de um bloco e na parte de inicialização da instrução for. Biblioteca alternativa de entrada e saída de dados baseada em streams, mais segura e mais simples. Tipo string (da biblioteca standard) mais fácil de usar do que as strings built-in herdadas do C. Variáveis qualificadas com const podem ser usadas onde é esperada uma expressão constante (dispensa macros). Tipo bool com valores true e false. Operadores de conversão de tipos mais seguros. ADA / DEI - ISEP 2001/2000

Resumo de extensões ao C (cont.)! Referências e passagem de argumentos por referência. Funções inline (dispensa macros). Argumentos por omissão. Nomes de funções sobrecarregados (overloaded). Padrões (templates) de funções (dispensa macros). Alocação e libertação de memória dinâmica com new e delete mais controlada do que com malloc e free (nomeadamente quando se usam classes - ver a seguir). As palavras chave struct, union e enum não são necessárias ao usar um tipo definido com estas palavras (dispensa typedef). Espaços de nomes (namespaces) como módulos lógicos mais flexíveis do que os módulos físicos (ficheiros com código fonte. ADA / DEI - ISEP 2001/2000

Resumo Programação OO em C++ A classe é a unidade de ocultação de dados e de encapsulamento Classe como tipo abstracto de dados: a classe é o mecanismo que suporta abstracção de dados, ao permitir que os detalhes de representação sejam escondidos e acedidos exclusivamente através de um conjunto de operações definidas como parte da classe A classe proporciona uma unidade de modularidade. Reutilização de código promovida pelo mecanismo de herança Polimorfismo (a capacidade de objectos de diferentes classes relacionadas por herança responderem diferentemente à chamada da mesma função-membro) é suportado através de classes com funções virtuais. ADA / DEI - ISEP 2001/2000

Exemplo – Interface Stack // stack.h template <class T> class Stack { protected: int size; // capacidade da stack int top; // índice do elemento no topo da stack T *stackPtr; // apontador para a base da stack public: Stack(int = 100); // construtor ~Stack() { delete [] stackPtr; } // destrutor bool push(const T&); // coloca na stack bool pop(T&); // retira da stack bool isEmpty() const { return top == -1; } bool isFull() const { return top == size - 1; } }; ADA / DEI - ISEP 2001/2000

Exemplo – Implementação da stack template <class T> Stack<T>::Stack(int s) { size = s; top = -1; // vazia stackPtr = new T[size]; } template <class T> bool Stack<T>::push(const T &item) { if (isFull()) return false; // insucesso stackPtr[++top] = item; return true; // sucesso } template <class T> bool Stack<T>::pop(T &item) { if (isEmpty()) return false; item = stackPtr[top--]; return true; // sucesso } ADA / DEI - ISEP 2001/2000

Exemplo – Uso da stack #include <iostream.h> #include "stack.h" main() { Stack<int> intStack; // stack de inteiros int i = 1; cout << "\nPush elementos para a stack\n"; while ( intStack.push(i) ) { // Enche a stack cout << i << ' ' ; i++; } cout << "Stack cheia; pop elementos da stack" << endl; while (intStack.pop(i)) // retira da stack cout << i << ' ' ; cout << "Stack vazia." << endl; return 0; } ADA / DEI - ISEP 2001/2000