viernes, 18 de septiembre de 2015

Sobrecarga de operadores

C++ permite sobrecargar los operadores escribiendo una función con la palabra reservada operator, seguida por el simbolo del operador que va sobrecargar por ejemplo : el operador de suma (+).
Para utilizer un operador sobre objetos de clases, el operador debe sobrecargarse, existen dos excepciones en operadores que no necesitan sobrecargarse el de asignacion (=) y el operador de direccion &.
 No se pueden crearse operadores nuevos, un operador unario no puede cambiarse por un operador binario y un operador binario a operador unario.
El operador debe ser miembro de una clase.

Ejemplo:
Codificacion CodeBlocks

#include <iostream>
#include <iomanip>
using namespace std;
class Fecha
{
private:
    int dia;
    int mes;
    int anio;
public:
    Fecha(int =9,int =9,int =1900);
    void estFecha(int,int,int);
    void asignarDia(int);
    void asignarMes(int);
    void asignarAnio(int);
    int obtenerDia();
    int obtenerMes();
    int obtenerAnio();
    Fecha operator+(int);
    void mostrarFecha();
};
Fecha::Fecha(int d, int m,int a)
{
    dia=d;
    mes=m;
    anio=a;
}
void Fecha::estFecha(int d,int m,int a)
{
    dia=d;
    mes=m;
    anio=a;
}
void Fecha::asignarDia(int d)
{
    dia=d;
}
void Fecha::asignarMes(int m)
{
    mes=m;
}
void Fecha::asignarAnio(int a)
{
    anio=a;
}
int Fecha::obtenerDia()
{
    return dia;
}
int Fecha::obtenerMes()
{
    return mes;
}
int Fecha::obtenerAnio()
{
    return anio;
}
Fecha Fecha::operator+(int dias)
{
    Fecha aux;
    aux.dia=dia+dias;
    aux.mes=mes;
    aux.anio=anio;
    while(aux.dia>30)
    {
        aux.mes++;
        aux.dia -=30;
    }
    while(aux.mes>12)
    {
        aux.anio++;
        aux.mes -=12;
    }
    return aux;
}
void Fecha::mostrarFecha()
{
    cout<<setw(2)<<dia<<"/"<<setw(2)<<mes<<"/"<<setw(4)<<anio<<endl;
}

int main()
{
    Fecha f1(20,1,2010),f2;
    cout<<"Fecha es : ";
    f1.mostrarFecha();
    f2=f1 + 366;
    cout<<"ahora la fecha es : ";
    f2.mostrarFecha();
    return 0;
}

No hay comentarios:

Publicar un comentario