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

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

ADA / DEI - ISEP 2001/20001 Classes C++ Class nome da classe { private: membros privados protected: membros protegidos public: membros públicos }; [Tipo_retorno]

Apresentações semelhantes


Apresentação em tema: "ADA / DEI - ISEP 2001/20001 Classes C++ Class nome da classe { private: membros privados protected: membros protegidos public: membros públicos }; [Tipo_retorno]"— Transcrição da apresentação:

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

2 ADA / DEI - ISEP 2001/20002 Exemplo de uma Classe C++ #include 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="<

3 ADA / DEI - ISEP 2001/20003 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

4 ADA / DEI - ISEP 2001/20004 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 (const circulo &c) { raio=c.raio; coordx=c.coordx;coordy=c.coordy; cor= new char [strlen(c.cor)+1] ; strcpy(cor,c.cor); }; circulo(); circulo(int x, int y, int r, char *c ); circulo(int x=0, int y=0, int r=5, char * c="azul )

5 ADA / DEI - ISEP 2001/20005 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; }

6 ADA / DEI - ISEP 2001/20006 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; }

7 ADA / DEI - ISEP 2001/20007 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 )

8 ADA / DEI - ISEP 2001/20008 Exemplo com classe derivada 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; }; Um Aluno é (is-a) uma Pessoa

9 ADA / DEI - ISEP 2001/20009 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.

10 ADA / DEI - ISEP 2001/ 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.

11 ADA / DEI - ISEP 2001/ 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.

12 ADA / DEI - ISEP 2001/ Exemplo – Interface Stack // stack.h template 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; } };

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

14 ADA / DEI - ISEP 2001/ Exemplo – Uso da stack #include #include "stack.h" main() { Stack 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; }


Carregar ppt "ADA / DEI - ISEP 2001/20001 Classes C++ Class nome da classe { private: membros privados protected: membros protegidos public: membros públicos }; [Tipo_retorno]"

Apresentações semelhantes


Anúncios Google