A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

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

Apresentações semelhantes


Apresentação em tema: "Classes C++ Class nome da classe { private: membros privados"— Transcrição da apresentação:

1 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

2 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

3 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

4 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

5 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

6 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

7 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

8 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

9 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

10 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

11 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

12 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

13 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

14 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


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

Apresentações semelhantes


Anúncios Google