Programação Orientada a Objetos

Documentos relacionados
ORIENTAÇÃO A OBJETOS SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Sobrecarga de Operadores

12. SOBRECARGA DE OPERADOR

Linguagem de Programação C++

Técnicas de Programação:

DEFINIÇÃO DE CLASSES EM C++

Programação Orientada a Objetos Aula I Declaração de classes, métodos construtores. Prof.: Bruno E. G. Gomes IFRN

Física Computacional 11 Classes

Fundamentos de Programação

Fundamentos de Programação 2

Programação Orientada por Objectos em C++ (alguns conceitos) Algoritmos e Estruturas de Dados 2009/2010. Três maneiras de passar parâmetros:

Introdução à Computação MAC0110

Programação Orientada a Objetos CLASSES E OBJETOS

Friends e Sobrecarga

Paradigmas de Linguagens de Programação. Expressões e Instruções de Atribuição

Princípios de Desenvolvimento de Algoritmos MAC122

Passagem de parâmetros

Redefinição de Operadores

Linguagens de Programação

Linguagens de Programação. Parte IV. Relembrando da Última Aula... Sobrecarga de Operadores. Fundamentos de Sobrecarga de Operadores

Estruturas da linguagem C. 1. Identificadores, tipos primitivos, variáveis e constantes, operadores e expressões.

C++ - Sobrecarga de Operadores

Capítulo 7. Expressões e Sentenças de Atribuição

Carlos Eduardo Batista. Centro de Informática - UFPB

Métodos Computacionais. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

Aula 6 POO 1 Construtores. Profa. Elaine Faria UFU

ORIENTAÇÃO A OBJETOS SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Linguagens de Programação Departamento de Engenharia Eletrônica e de Computação - DEL-Poli/UFRJ Prof.: Miguel Elias Mitre Campista

Programação Orientada a Objetos para Redes de Computadores

Programação Orientada a Objetos para Redes de Computadores. Fundamentos de Sobrecarga de Operadores. Sobrecarga de Operadores

Introdução à Programação. Operadores, Expressões Aritméticas e Entrada/Saída de Dados

LINGUAGEM DE PROGRAMAÇÃO C++ SOBRECARGA DE OPERADORES SOBRECARGA DE OPERADORES MOTIVAÇÃO PARA SOBRECARGA DE OPERADORES...

LINGUAGEM DE PROGRAMAÇÃO C++ SOBRECARGA DE OPERADORES

Programação Aplicada à Engenharia

Funções em Linguagem C Parte II

Linguagem de Programação C++

Estrutura de dados 1. Ponteiros

Módulo 1. Introdução. AEDS I C++ (Rone Ilídio)

Linguagens de Programação

Operadores e Expressões: bit-a-bit e especiais

Introdução ao C++ Ambientes de Desenvolvimento Avançados. 2 de Outubro de 2002 ADA / DEI - ISEP 2002/2003 1

Linguagens de Programação I

//conteúdo do arquivo Matriz.h class Matriz { private: int *elementos; int numerodelinhas; int numerodecolunas; void setnumerodelinhas(int); void

Classes e Encapsulamento

13/11/15. Incrementando C: C++ E na especificação de BigInt... Arquitetura da solução exemplo. O arquivo de declarações. Explorando a classe BigInt

Linguagem de Programação Orientada a Objeto Construtores e Sobrecarga

Linguagens de Programação. Marco A L Barbosa

4.1- Aritméticos + soma - subtração * multiplicação / divisão % módulo (resto da divisão de inteiros ).

Expressões e sentença de atribuição

Aula 24: Ponteiros e Alocação Dinâmica

Construtores. Introdução

Aula 4 - Operadores. Prof. Laura Silva de Assis. Engenharia de Computação 2 o Período

Programação de Computadores I Introdução ao C PROFESSORA CINTIA CAETANO

C++ - Funções. Forma geral das funções C++

Fundamentos de Programação

INF1636 PROGRAMAÇÃO ORIENTADA A OBJETOS

Programação Orientada a Objetos

Aula 08: Funções (Parte II)

Estruturas Dinâmicas - Ponteiros Parte I

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Linguagens de Programação Departamento de Engenharia Eletrônica e de Computação - DEL-Poli/UFRJ Prof.: Miguel Elias Mitre Campista

Introdução à linguagem C++

Programação científica C++

Parte IV. Linguagens de Programação. Relembrando da Última Aula... Empacotador de Préprocessadores. Primeiro Exemplo Usando Classes em C++

Linguagens de Programação

Overloading de Operadores

Linguagem Java - Introdução

#include <stdio.h> Void main() { printf( Cheguei!\n"); } INTRODUÇÃO A LINGUAGEM C

Aula 25: Funções com Arrays

ANHANGUERA ESTRUTURA DE DADOS AULA 04 MATRIZES, LISTAS E ALOCAÇÃO DINÂMICA. Prof. Thomás da Costa

Ponteiros de Variáveis

Introdução a JAVA. Variáveis, tipos, expressões, comandos e blocos

Exercícios... Capítulo 15. if62c. prof. Robinson Vida Noronha. Monday, March 23, 15

Programação C/C++ Slide 5 Nielsen Castelo Damasceno

Ambientação com a Sintaxe de Java: parte 1

Passagem de parâmetros

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

3. Linguagem de Programação C

Física Computacional 15 Templates

CIV 2802 Sistemas Gráficos para Engenharia º Trabalho: Programação básica em C++: Classes

Programação em C++: Introdução

Aula 27: Estruturas heterogêneas e alocação dinâmica

Física Computacional

Programação Orientada a Objetos HERANÇA E COMPOSIÇÃO

Linguagens de Programação Aula 8

Computação 2. Aula 7. Profª. Fabiany Ponteiros

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Estruturas de Dados. Módulo 4 Funções. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

Estrutura de Condição, Escolha e Repetição

# Estrutura de Dados # Aula - Revisão de C/C++ na Prática. Prof. Leinylson Fontinele Pereira

Curso de Programação C em Ambientes Linux Aula 04

Introdução a JAVA. Variaveis, tipos, expressões, comandos e blocos

Programação Orientada a Objetos para Redes de Computadores

Classes e Objetos. Prof. Leonardo Barreto Campos 1

Programação Orientada a Objetos para Redes de Computadores. Empacotador de Pré-processador. Empacotador de. Primeiro Exemplo Usando Classes em C++

Instituto de Informática Estrutura de Dados II

Overloading de Operadores

Linguagens de Programação

Algoritmos II prof. Daniel Oliveira

Transcrição:

Programação Orientada a Objetos Aula VIII Prof. Felício Bruzzi Barros Maio de 2008

Sobrecarga de operadores matriz A, B, C, D; multiplica(a,b,c); soma(a,b,d); escreve(d); matriz A, B, C, D; C=A*B; D=A+B; cout << D << endl; código mais fácil de ser compreendido; funções (operadores) mais fáceis de serem utilizadas; Sobrecarga de funções: funções com o mesmo nome, mas com diferentes parâmetros (e códigos diferentes); Sobrecarga de operadores: Operadores com o mesmo nome, mas com diferentes operandos (e códigos diferentes).

Operadores sobrecarregáveis + - * / % ^ & ~! = < > += -= *= /= %= ^= &= = << >> >>= <<= ==!= <= >= && ++ -- ->*, -> [] () new new[] delete delete[]

Operadores não-sobrecarregáveis e regras Não podem ser sobrecarregados: :: Resolução de escopo;. Seleção de membro;.* Seleção de membro através de um ponteiro para função. Regras: O operador sobrecarregado não pode alterar as regras de precedência e associatividade do C e C++; Ao menos um dos parâmetros do operador deverá ser membro de uma classe. O número de parâmetros do operador sobrecarregado depende do tipo do operador e da função: Operador unário, função membro Nenhum parâmetro Operador unário, função não membro Um parâmetro Operador binário, função membro Um parâmetro Operador binário, função não membro Dois parâmetros

Sintaxe Função com um nome especial: operator op, onde op é o operador. Sobrecarga como função membro não static: Declaração: tipo_retorno operator op (lista_de_parâmetros); Definição: tipo_retorno Nome_classe::operator op (lista_de_parâmetros) {... // código da função } Como função friend (não membro): Declaração: friend tipo_retorno operator op (lista_de_parâmetros); Definição: tipo_retorno operator op(lista_de_parâmetros) {... // código da função} Como função não membro e não friend: Declaração: tipo_retorno operator op (lista_de_parâmetros); Definição: exemplo:vetmat tipo_retorno operator op(lista_de_parâmetros) {... // código da função}

Observações Usar passagem por referência sempre que possível mas eficiente para objetos grandes (evitar o overhead ). Não se pode passar por referência uma variável local. Não se pode usar passagem por ponteiro. (não se pode sobrecarregar operadores que agem sobre ponteiros ou tipos definidos).

Conversões Criar construtor com um argumento: Declaração: tipo_1 (tipo_2); void f(tipo_1); int main() { tipo_2 A; tipo_1 B(A); // Explícita f(a); // Implícita } Declaração: explicit tipo_1 (tipo_2); void f(tipo_1); int main() { tipo_2 A; tipo_1 B(A); // Explícita f(a); // Erro } exemplo:vetmat

Operador de conversão Há casos em que o uso de um construtor para efetuar a conversão não é adequado, porque o construtor não pode especificar: Uma conversão de um tipo definido pelo usuário para um tipo básico, pois os tipos básicos não são classes; Uma conversão de um novo tipo definido pelo usuário para uma classe previamente definida (sem que se tenha a modificação da classe antiga). Nestes casos, pode-se sobrecarregar o operador de conversão, para efetuar a conversão de um objeto do tipo Classe1 para um objeto do tipo Classe2: O operador deve ser membro de Classe1; A sintaxe a ser usada em classe 1 é: operator Classe2( ); O tipo de retorno não deve ser colocado, pois ele é implicitamente igual a Classe2; Não se pode definir um operador de conversão e um construtor dedicado a efetuar a mesma conversão: isto é ilegal, pois gera ambiguidade!

Operador de conversão const float PARALELO = 1.69; class Real { double dinheiro; public : Real (double valor) { dinheiro = valor; } operator Dolar ( ); // Real em Dolar via operador operator int ( ); // Real em unsigned long friend void mostrar (unsigned long var_long) }; Real :: operator Dolar ( ) { return Dolar ((float) dinheiro/paralelo); } Real :: operator ìnt ( ) { return (int) dinheiro; } int main ( ) { Real minimo (110.00), paralelo (1.13); Dolar usa (10.50); int truncado = paralelo; Dolar minimo_dolar = minimo; truncado = (int) minimo; return 0; }

Ambigüidades class X {/*... */ X(int); X(char *); }; class Y {/*... */ Y(int); }; class Z {/*... */ Z(X);}; X f(x); Y f(y); Z g(z); f(1); // Erro: ambíguo, f(x(1)) ou f(y(1))??? f(x(1)); // OK f(y(1)); // OK g("teste"); // Erro, dois níveis de conversão definidas pelo usuário são necessários g(x("teste")); // OK, g(z(x("teste"))); Z(X) implícita g(z("teste")); // OK, g(z(x("teste"))); X("teste") implícita

Laboratório IX Cria a classe Vetor, contendo: construtor de parâmetros (passando dimensão e uma ponteiro); construtor de parâmetros (passando dimensão e um escalar para preencher o vetor); construtor de cópia; destrutor; operador de atribuição; operadores binários (+=, -=, +, -); operadores unários (+,-); função produto escalar; funções de acesso à dimensão; operadores binários para multiplicação vetor * escalar, escalar * vetor; operadores binários para divisão vetor \ escalar, escalar \ vetor; operador de fluxo <<; operadores de acesso [ ] e ( ) (leitura e modificação); Escreva um programa demonstrando a utilização desta classe Evitar o uso das funções friends.

Quarto Trabalho primeira parte Cria a classe Matriz, contendo: construtor de parâmetros (passando número de linhas, de colunas e uma ponteiro para ponteiro); construtor de parâmetros (passando número de linhas, de colunas e um escalar para preencher a matriz); construtor de cópia; construtor para conversão entre vetor e matriz (matriz coluna); destrutor; operador de atribuição; operadores binários (+=, -=, +, -); operadores unários (+,-); operador binários (*) para produto entre matrizes ; operador binários (*) para produto entre matrizes e vetor ; funções de acesso ao número de linhas e colunas; operadores binários para multiplicação matriz * escalar, escalar * matriz; operadores binários para divisão matriz \ escalar, escalar \ matriz; operador de fluxo << operadores de acesso [ ] [ ] e (, ) (leitura e modificação); Escreva um programa demonstrando a utilização desta classe Evitar o uso das funções friends.