Const member functions

Slides:



Advertisements
Apresentações semelhantes
|Introdução a Java para programadores Telis. Jogo de Dados simples O jogo é jogado por dois jogadores. Cada jogador faz sua jogada (lança um dado), e.
Advertisements

Curso de aprofundamento na linguagem C
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.
C/C++ para Sistemas Operacionais Professor: André Luis Meneses Silva /msn: Página:
Modificadores Marco Antonio. Introdução Em todas as linguagens de programação o acesso a classes/métodos deve seguir algumas regras.
Funções em C.
Classes C++ Class nome da classe { private: membros privados
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 7 – Métodos avançados Capitulo 7 Métodos avançados.
Engenharia Informática Programação I & Estruturas de Dados e Algoritmos 2001/ Capitulo 3 – Introdução às classes Capitulo 3 Introdução às classes.
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS CLASSES E OBJETOS – UMA VISÃO MAIS APROFUNDADA Prof. Thiago Pereira Rique
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.
Perspectivas baseadas em procedimentos e orientadas por objectos Conceitos principais: Encapsulamento, Herança, Polimorfismo (Encapsulation, Hierarchy,
1. Classes 2. Membros estáticos 1.1. Palavra chave this
Vamos abordar o exemplo
LEIC/FEUP Tecnologia de Sistemas de Gestão de Bases de Dados
Orientação a Objetos: Modificador Final para Métodos e Classes
Mutação Orientada a Objeto para Assegurar a Qualidade de Testes Baseado no Artigo: Object-Oriented Mutation to Asses the Quality of Tests Anna Derezinska.
Filas circulares.
INF Computação Gráfica
Sobrecarga de Operadores
Listas lineares Listas Lineares Fila Dupla Pilha Fila Saída restrita
Ponteiros em C.
8ª. série – 9º. ano 2010 Prof. Ynez Soledade
Funções definidas pelo usuário STL oferece a possibilidade de que o usuário escreva seus próprios algoritmos para processar os elementos de coleções #include.
1 Editor de Equações Com a opção Create New activada, seleccione a aplicação Microsoft Editor de Equações 3.0, da listagem que surge na caixa de diálogo.
Modularização: funções e procedimentos
1 Aula 5 Instâncias dinâmicas. 2003/2004 Programação Orientada para Objectos 2 Instâncias… int j = 20; int f() { int const i = 10; // … } Constante automática.
2002/2003 Programação Orientada para Objectos 1 Aula 7 - Herança Herança pública: relação é um. A relação tem um. A relação é composto por um. Ponteiros,
1 Aula 3 Listas e iteradores (cont.). 2003/2004 Programação Orientada para Objectos 2 ListaDeInt : interface class ListaDeInt { public: typedef int Item;
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.
2002/2003 Programação Orientada para Objectos 1 Aula 3 Utilização de listas Melhorando a implementação das listas e iteradores Reflexão sobre interfaces.
Aula 2 Listas e iteradores.
Classes & Objectos em JAVA5
Métodos Programação II 1 Métodos de Programação II (Mestrado Integrado em Engenharia de Comunicações) 1º Ano, 2º Semestre Elementos de Classe, class wrappers.
Curso de extensão em Desenvolvimento Web
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
O Mecanismo de Threads em Java 2. Criar uma classe herdeira da super classe Thread public class minhaThread extends Thread{ public class minhaThread extends.
Introdução a linguagem Python
Classes Revisando: –Forma de implementação de estruturas específicas –Atributos (grupos de dados) –Métodos (conjuntos de procedimentos)
Linguagens de Programação
Objectos: Introdução O objecto ou classe é o conceito base de uma linguagem de programação por objectos como o C++. Tal como acontecia com as estruturas,
1 Funções (versão C) Funções são pedaços de código encapsulados para fácil acesso. Em C e C++ o processo de construção de uma função passa por 2 etapas.
Curso C++ (J. Seixas) Primeiro exemplo: classe node Uma classe representando um ponto de uma rede (node) typedef long coord; typedef long seq; typedef.
Uma classe para vectores
Linguagem de Programação II
Linguagem de programação I A Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
Quarto Trabalho Prático de GTI
Atributos, Encapsulamento e Interface em Java
Equipe de monitoria Aula prática 4
Paradigmas e Ferramentas de Desenvolvimento de Software – Revisão da linguagem C++ Lúbia Vinhas DPI - INPE.
Curso de C/C++ Aula 9 Instrutor: Luiz Felipe Sotero
if669 - Introdução à Programação
CAD AutoCAD TrimExtendChamferFilletOffsetArray.
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa This.
Programação orientada a objectos em C++
Curso de Aprendizado Industrial Desenvolvedor WEB
2002/2003 Programação Orientada para Objectos 1 Aula 6 Classes que reservam recursos externos Problemas comuns Construtores e destrutores Construção por.
Delimitando o Terreno Zoom Extents Rectangle Clique em qualquer ponto da (enter) e (enter)
2002/2003 Programação Orientada para Objectos 1 Aula 2 Noção de lista e de iterador Operações com listas e iteradores Classes embutidas.
Java Kickstart, day 2 Semelhanças com linguagem C.
Crescente e Decrescente Gráfico Domínio e Imagem
Trabalho Computacional Mecânica de Fluidos Ambiental Guillaume Riflet, Pedro Pina, Luís Fernandes.
Bruno Inojosa MCP .NET Framework
Modificadores Programação II.
Herança.
Classes abstratas São classes das quais não se pode instanciar objetos. São classes das quais não se pode instanciar objetos. Seu objetivo é ser herdada.
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:

Const member functions Frequentemente construimos funções cujo objectivo é aceder a um objecto sem o alterar (seja público ou privado). Nesse caso é preciso dar indicação ao leitor humano que assim é criando funções membro constantes. Exemplo de alteração na classe node: dist getDistance(node& myNode) const; Neste caso a função getDistance fornece a distância sem poder alterar myNode. Se tivessemos const dist getDistance(node& myNode) const; o resultado também não poderia ser alterado Curso C++ (J. Seixas)

Const member functions O overloading the funções membro const tem algumas características especiais: class Node { public: Node(); // Create uninitialized Node(coord x, coord y); // Create from (x,y) dist getDistance(Node point) const; // Distance to another point distance getDistance(Row line) const; // Distance to a line coord& x(); // Reference to x-coordinate coord x() const; // Get x-coordinate coord& y(); // Reference to y-coordinate coord y() const; // Get y-coordinate ang angle(Point p1, Point p3) const; private: coord the_x; // x-coordinate coord the_y; // y-coordinate }; #include <iostream.h> #include “Node.h" static void f() { Node p1(2, 3); cout << p1.x() << endl; // Uses non-const x() p1.x() = 1; // Uses non-const x() p1.y() = 2; // Uses non-const y() const Node p2 = p1; cout << p2.x() << endl; // Uses const x() /* p2.x() = 3;// WRONG: Operand of = must be an lvalue (Uses const x()) p2.y() = 4;// WRONG: Operand of = must be an lvalue (Uses const x()) */ Curso C++ (J. Seixas)

Templates A noção de overloading é interessante, mas requer ainda assim a definição de várias versões de funções e classes. Para fazer uma programação genérica o C++ inclui a noção de template. Exemplo para classes: template <class Type> class Queue{ public: Queue(); Type &front() const; void push(const Type &); void pop(); bool empty() const; private: …. } em vez de class pode-se usar também a keyword typename na definição do template. Para usar o template faz-se por exemplo a declaração Queue<int> qi Curso C++ (J. Seixas)

Templates Templates podem ser usados também só com funções template <typename T> int compare(const T &v1, const T &v2){ if(v1 < v2) return -1; if(v2 < v1) return 1; return 0; } e pode haver mais do que uma indicação de template template <typename T, typename Other, …> Curso C++ (J. Seixas)

Templates É errado pôr: As funções inline têm de ser declaradas como template <typename T> inline T min(const T&, const T&); É errado pôr: inline template <typename T> T min(const T&, const T&); A propósito: ao contrário do que é costume, as funções inline devem ser definidas nos header files. A razão é que o compilador necessita da definição para expandir a função. O protótipo apenas é insuficiente! Curso C++ (J. Seixas)

Templates Os parâmetros de template têm escopo da declaração de template: typedef double T; template <class T> T calc(const T& a, const T& b){ T tmp=a; return tmp; } tmp tem p tipo definido por <class T> NÃO o double definido pelo typedef global. O nome do parâmetro de template não pode ser redefinido por typedef dentro do escopo. Curso C++ (J. Seixas)

Templates Os parâmetros de template não têm de ser necessariamente uma indicação de tipo. Exemplo: template <class T, size_t N> void array_init(T (&parm) [N]){ for(size_t i=0; I != N; ++i){ parm[i] = 0; } N é aqui uma constante especial: int x[42]; double y[10]; array_init(x); // instancia array_init(int(&)[42]) array_init(y); // instancia array_init(double(&)[10]) Curso C++ (J. Seixas)

Gestão dinâmica de memória A gestão dinâmica de memória em C++ é feita usando new e delete. Por exemplo, para criar um vector de inteiros: int *vec = new int[n_elem]; if(!vec) error("Unable to allocate memory for vec.", 1); memset(vec,0,n_elem*sizeof(int)); … delete[] vec; Curso C++ (J. Seixas)

Gestão dinâmica de memória As nossas velhas amigas matrizes: int **mat=new (int*)[n_lin]; mat[0]=vector(n_lin*n_col); // all matrix memory in one row if(!(mat[0])) error("Unable to allocate memory for mat.", 2); for(int i=0; i < n_lin ;++i) mat[i]=mat[0]+(i*n_col); // each new line starts n_col ahead memset(mat[0],0, n_lin*n_col*sizeof(int)); … delete[] mat[0]; delete[] mat; Curso C++ (J. Seixas)

Gestão dinâmica de memória Exemplo com a classe node: node* point2D3=new node; point2D3->setCoordinates(3,4); cout << "Novo nodo, distancia a linha 2: " << point2D3->getDistance(Line2) << endl; cout << "Novo nodo, distancia ao nodo 2: " << point2D3->getDistance(point2D2) << endl; delete point2D3; Sem [] ! O operador [] em delete é apenas usado quando criamos variáveis dimensionadas! Curso C++ (J. Seixas)