Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
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 ×