Buscar

[Prof. Emiliana] Aula Prática 10

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 3 páginas

Prévia do material em texto

1 
UNIVERSIDADE FEDERAL DE OURO PRETO 
INSTITUTO DE CIÊNCIAS EXATAS E BIOLÓGICAS 
DEPARTAMENTO DE COMPUTAÇÃO 
BCC702 – PROGRAMAÇÃO DE COMPUTADORES II 
 
10a Aula prática de BCC702 – Programação Orientada a Objetos 
Sobrecarga de Operadores 
 
Sobrecarregar um operador significa redefinir seu símbolo, de maneira que ele se 
aplique também a tipos de dados definidos pelo usuário como classes e estruturas. 
 
A implementação de sobrecarga de operadores é definida por meio de funções 
chamadas operadoras, criadas como membro da classe. A forma geral é: 
 
 
 
Como exemplo considere a classe Ponto, implementada em sala, para a qual é definido 
o operador binário ( + ). 
 
Interface para a classe Ponto: 
 
#include <iostream> 
using namespace std; 
 
class Ponto{ 
 private: 
 int x, y; 
 public: 
 Ponto(); 
 Ponto(int x1, int y1); 
 void print(); 
 Ponto operator +(Ponto p); //função operadora 
}; 
Ponto.h 
 
Implementação da classe Ponto: 
 
#include "Ponto.h" 
 
Ponto::Ponto(){ 
 x = 0; 
 y = 0; 
} 
 
 
 2 
Ponto::Ponto(int x1, int y1){ 
 x = x1; 
 y = y1; 
} 
 
void Ponto::print(){ 
 cout << "( "<< x << ", "<< y << " )" << endl; 
} 
 
Ponto Ponto::operator +(Ponto p){ 
 Ponto aux; 
 aux.x = x + p.x; 
 aux.y = y + p.y; 
 return aux; 
} 
Ponto.cpp 
 
Utilizando a classe Ponto no programa principal. 
 
#include "Ponto.h" 
 
void main(){ 
 
 Ponto A(5, 1), B(2, 3), C; 
 cout<<"A = "; 
 
 A.print(); 
 cout<<"B = "; 
 
 B.print(); 
 cout<<"C = "; 
 
 C.print(); 
 
 C = A + B; 
 
 cout<<"C = A + B = "; 
 C.print(); 
 
 system("pause"); 
 
} 
<<saída>> 
 
A = ( 5, 1 ) 
B = ( 2, 3 ) 
C = ( 0, 0 ) 
C = A + B = ( 7, 4 ) 
 
 
Exercícios: 
 
1. Acrescente à classe Ponto os operadores: menos unário ( - ), menos binário ( - ), 
multiplicação ( * ), divisão ( / ), módulo ( % ), as operações aritméticas de atribuição 
( +=, -=, /=, *= e %=) e as operações relacionais (==, !=). 
 
2. Defina uma classe denominada Fracao. Essa classe deve armazenar o numerador e o 
denominador de uma fração em duas variáveis inteiras. Inclua: 
 3 
 
a) Uma construtor sem parâmentros e outro que receba numerador e denominador 
da fração; 
b) Um método que retorne o numerador e outro que retorne o denominador; 
c) As operações de adição, subtração, multiplicação e divisão realizando a 
sobrecarga de operadores; 
d) As operações de incremento e decremento pré e pós-fixadas. 
 
Mantenha a sua fração o mais simplificada possível e, para tanto, utilize a seguinte 
função que calcula o máximo divisor comum, entre dois valores inteiros: 
 
int mdc(int a, int b){ 
 int resto; 
 
 while(b != 0){ 
 resto = a % b; 
 a = b; 
 b = resto; 
 } 
 
 return a; 
} 
 
Além disso, para auxiliar neste exercício lembre-se que o mínimo múltiplo comum 
entre dois valores inteiros a e b é dado por: 
 
)b,a(mdc
ba ×

Outros materiais