Sobrecarga de Operadores

Slides:



Advertisements
Apresentações semelhantes
Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 11 Criado por Frederick H. Colclough, Colorado Technical University Compilação Separada.
Advertisements

Pearson Education Slide 1. Pearson Education Slide 2 Cap í tulo 8 Criado por Frederick H. Colclough, Colorado Technical University Sobrecarga de Operador,
Curso de aprofundamento na linguagem C
Paradigmas da Programação – Semestre 1 – Aula 6
Paulo Marques Hernâni Pedroso
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS CLASSES E OBJETOS – UMA VISÃO MAIS APROFUNDADA Prof. Thiago Pereira Rique
Interação entre objetos
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
Universidade Federal de São Carlos Introdução à Linguagem C Comandos.
Recursividade Prof. Alex F. V. Machado
De 17 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes Aula.
Templates Traduzido de:
2002 LCG/UFRJ. All rights reserved. 1 Tópicos em C++ Claudio Esperança Paulo Roma Cavalcanti.
INF Computação Gráfica
Diagrama de Classes.
Wagner Santos C. de Jesus
Orientação a Objetos Classes
Paradigmas da Programação – Semestre 1 – Aula 5
Centro Integrado de Tecnologia da Informação
Curso de C/C++ Avançado
Matrizes e Funções - Continuação
Programação Baseada em Objectos Desenho de TAD
Aula 13 Tipos Abstractos de Dados IV. 2003/2004 Introdução à Programação 2 Estrutura global do programa (I) Construtores Inspectores.
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.
Classes e objetos P. O. O. Prof. Grace.
APRESENTAÇÃO: GIANCARLO DE GUSMÃO GONÇALVES CURSO DE C AULA 08: Tipos Estruturados.
Tipos Agregados Homogêneos e Listas
Programação Orientada a Objetos com Java
Funções Declaração function nomedafunção (arg_1, arg_2,..., arg_n) corpoDaFunção end.
Linguagens de Programação
Padrão de Projeto Visitor
Interfaces.
Linguagem de Programação II Carlos Oberdan Rolim Ciência da Computação Sistemas de Informação.
PROGRAMAÇÃO I PONTEIROS.
Programação I Aula 2 (Métodos)
+ Curso de C/C++ Aula 7 Instrutor: Luiz Felipe Sotero Material por: Allan Lima
Expressões e Instrução de Atribuição
Introdução à linguagem C
Generic Programming Daniel Terzella Leandro Amancio
1 C# O tipo System.String Sharp Shooters.NET Universidade Federal de Pernambuco Centro de Informática Recife, 05/09/2002 Autor: Marden Menezes Costa.
F UNÇÕES : PASSAGEM DE PARÂMETROS Aluno:Kaynã Vasconcelos Santos Matéria: Estrutura de dados e algoritmos I Turma: Professor: Danilo Silva dos Santos.
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng. da Computação IF62C - Fundamentos de Programação Semana 12 – Overloading X Overriding Prof.a.
Programação Orientada à Objetos
Wagner Santos C. de Jesus
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Aula prática 14 Orientação a Objetos – C++ Parte 2
Programação Orientada a Objetos - Java
Programação Orientada a Objetos - Java Professor: Jean Carlo Mendes.
Linguagens de Programação – DEL-Poli/UFRJ Prof. Miguel Campista Linguagens de Programação Prof. Miguel Elias Mitre Campista
Prof. Gilberto Irajá Müller
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.
Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota
Java Kickstart, day 2 Semelhanças com linguagem C.
Prof.: Bruno Rafael de Oliveira Rodrigues. Construtor é bloco declarado que é chamado no momento em que o Objeto é criado (instanciado). Todas as classes.
Implementação Orientada a Objetos – Aula 05 Construtores e sobrecarga de métodos Prof. Danielle Martin Universidade de Mogi das Cruzes
Classes Abstratas e Interface
Herança e Arquitetura em camadas
Aula Prática 3 Funções Monitoria Introdução à Programação.
Recursividade Profs. De Prog2 e Lab2.
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.
Operador this Karen Busolin karenbusolin.wordpress.com.
PROGRAMAÇÃO II – PARTE 3 Profa. Maria Augusta Constante Puget.
Operador Condicional (? :). Operador Condicional Operador ternário que pode ser utilizado no lugar de uma instrução if...else.
Módulo II Capítulo 1: Orientação a Objetos
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
Módulo I Capítulo 7: Funções e Procedimentos William Ivanski Curso de Programação C#
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ PAE: Pedro Shiguihara Professor: Dilvan Moreira.
Transcrição da apresentação:

Sobrecarga de Operadores Assim como é possível sobrecarregar métodos e funções, também é possível sobrecarregar os operadores de C++ Em C, a sobrecarga de operadores era implícita A aplicação de um operador é equivalente à chamada de uma função Em C++ é permitido sobrecarregar um operador, com o objetivo de simplificar a notação e uniformizar a expressão. Existem duas maneiras de implementar operadores para classes de objetos: como funções membro como funções globais

Sobrecarga de Operadores: Exemplo Para se sobrecarregar operadores é necessário compreender um pouco mais a fundo o comportamento desses operadores sobre os tipos básicos da linguagem. Considere o operador unário `!`(NOT) associado a um objeto w de uma classe qualquer W. A expressão !w é equivalente a: w.operator!(); // usando uma função membro operator!(w); // usando uma função global Para um operador binário, de soma por exemplo, a expressão w1 + w2 é equivalente as seguintes chamadas: x.operator+(y); // usando uma função membro Operator+(x,y); // usando uma função global

Exemplo - Classe complex class Complex { double re, im; public: Complex operator+ (const Complex&); Complex operator- (const Complex&); }; // Com esses operadores, é possível fazer: void main() { Complex c1, c2, c3; // ... c1 = c2 + c3; } Mas como implementar esses operadores?

Classe complex (funções membro) Complex Complex::operator+(const Complex& c) { Complex s; s.re = this.re + c.re; s.im = this.im + c.im; return s; } Complex Complex::operator-(const Complex& c) s.re = this.re - c.re; s.im = this.im - c.im; main() Complex r, s, t, u, v; // ... r = s + t; // r = s.operator+(t); u = r - v; // u = s.operator-(v); }

Classe complex (funções globais) Se o operador é binário e o método que faz a sua sobrecarga recebe como parâmetros dois objetos, então o método não pode ser chamado partindo-se de um objeto da classe, ou seja, a função é global: Complex Complex::operator-(const Complex& c1, const Complex& c2) { Complex s; s.re = c1.re + c2.re; // ERROR: re e im são private s.im = c1.im + c2.im; return s; } Nesse caso o mais usual é declarar a sobrecarga como friend da classe.

Classe complex (funções globais) class Complex { // ... friend Complex operator+ (const Complex&); friend Complex operator- (const Complex&); }; Com isso é possível acessar os campos privados da classe Complex. Com as modificações, o uso dos operadores passa a ser equivalente as seguintes chamadas de métodos: main() { Complex r, s, t, u, v; // ... r = s + t; // r = operator+(s,t); u = r - v; // u = operator-(s,v); }

Operadores que podem ser redefinidos A maior parte dos operadores podem ser sobrecarregados. Os operadores que não podem ser sobrecarregados são: . -> :: sizeof ?: