Ver Mensaje Individual
  #5 (permalink)  
Antiguo 14/03/2011, 19:14
fingeroso
 
Fecha de Ingreso: marzo-2011
Mensajes: 13
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Problema con sobrecarga operadores +=

Cita:
Iniciado por SDEK Ver Mensaje
¿miagenda += miagenda; ?? ¿ Eso quieres hacer?
nop, quiero hacer miagenda+=micontacto;

Algo he conseguido pero ahora no me guarda en la lista de contactos, empiezo a volverme loco.
Por cierto voy a editar el highlight de arriba para dejarlo igual que este pero no me deja.

Aclaro, la instruccion miagenda+=micontacto esta en la linea 275. Los operadores para la sobrecargar empiezan en la linea 156. Se que tiene algo que ver con el bloque de instrucciones que contienen pero en serio... mi cabeza no da para más. Como veis lo he seguido intentando por mi mismo y algo he conseguido. Si pudierais ayudarme os lo agradeceria muchisimo. No pido que lo completeis (que no estaria mal jeje) pero por favor necesito consejo y ayuda.


Código C++:
Ver original
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <fstream>
  5.  
  6. using namespace std;
  7.  
  8.  
  9. class fecha{
  10.     friend class agenda;
  11. private:
  12.     int dd,mm,aa;
  13.     bool valido;
  14. public:
  15.  
  16.     // solicitamos al usuario los datos de fecha
  17.     friend istream& operator >> (istream &medio, fecha &f2){
  18.         do{
  19.             cout << "Introduce el dia: "; medio >> f2.dd; medio.ignore();
  20.             cout << "Introduce el mes: "; medio >> f2.mm; medio.ignore();
  21.             cout << "Introduce el anyo: "; medio >> f2.aa; medio.ignore();
  22.             f2.valido=f2.comprobar();
  23.         }while (f2.valido==false);
  24.         return(medio);
  25.     }
  26.  
  27.     //mostramos al usuario los datos de fecha
  28.     friend ostream& operator << (ostream &medio, fecha f2){
  29.         medio << f2.dd << "/" << f2.mm << "/" << f2.aa << endl;
  30.         return(medio);
  31.     }
  32.  
  33.  
  34.     //comprobamos si la fecha es correcta
  35.     bool comprobar (){
  36.         valido=true;
  37.         if (dd<1 || dd>31) valido=false;
  38.         if (mm<1 || mm>12) valido=false;
  39.         if (aa<1950 || aa>2011) valido=false;
  40.  
  41.         return (valido);
  42.     }
  43.  
  44. };
  45.  
  46. class direccion{
  47.     friend class agenda;
  48. private:
  49.     string calle, localidad;
  50.     int numero;
  51. public:
  52.  
  53.     //solicitamos al usuario los datos de direccion
  54.     friend istream& operator >> (istream &medio, direccion &d2){
  55.         cout << "Introduce la calle: ";getline (medio,d2.calle);
  56.         cout << "Introuce el numero: "; medio >> d2.numero; medio.ignore();
  57.         cout << "Introduce la localidad: "; getline (medio,d2.localidad);
  58.         return(medio);
  59.     }
  60.  
  61.     //mostramos al usuario los datos de direccion
  62.     friend ostream& operator << (ostream &medio, direccion d2){
  63.         cout << "Calle: "; medio << d2.calle << endl;
  64.         cout << "Numero: "; medio << d2.numero << endl;
  65.         cout << "Localidad: "; medio << d2.localidad << endl;
  66.         return(medio);
  67.     }
  68.  
  69. };
  70.  
  71. class contacto{
  72.     friend class agenda;
  73. private:
  74.     fecha f1;
  75.     direccion d1;
  76.     string nombre, apellidos;
  77.  
  78. public:
  79.  
  80.     //solicitamos los datos del contacto
  81.     friend istream& operator >> (istream &medio, contacto &c1){
  82.         system("cls");
  83.         cout <<"Introduce el nombre: "; getline (medio,c1.nombre);
  84.         cout << "Introduce los apellidos: "; getline (medio,c1.apellidos);
  85.         medio >> c1.f1;
  86.         medio >> c1.d1;
  87.         return(medio);
  88.     }
  89.  
  90.     //mostramos los datos del contacto
  91.     friend ostream& operator << (ostream &medio, contacto c1){
  92.         cout << "Nombre: "; medio << c1.nombre<< endl;
  93.         cout << "Apellidos: "; medio << c1.apellidos<< endl;
  94.         medio << c1.f1;
  95.         medio << c1.d1;
  96.         cout << endl;
  97.  
  98.         return(medio);
  99.     }
  100. };
  101.  
  102. class agenda{
  103. private:
  104.     string buscarnombre;
  105.  
  106.     contacto *lista;
  107.     bool centinela;
  108.     int n;
  109. public:
  110.  
  111.     //constructor de agenda
  112.     agenda (){
  113.         getch();
  114.         system ("cls");
  115.         cout << "constructor agenda" << endl;
  116.         getch();
  117.         system ("cls");
  118.         n=0;
  119.         lista = NULL;
  120.         centinela=true;
  121.         return;
  122.     }
  123.     agenda (contacto micontacto){
  124.         lista = new contacto[n+1];
  125.         lista[n]=micontacto;
  126.         return;
  127.     }
  128.  
  129.     //destructor de agenda
  130.     ~agenda (){
  131.         getch();
  132.         system ("cls");
  133.         cout << "destructor de agenda" << endl;
  134.         getch();
  135.         system ("cls");
  136.         if (lista!=NULL)
  137.             delete []lista;
  138.         return;
  139.     }
  140.  
  141.     //constructor de copia de agenda
  142.     agenda (const agenda &copialista){
  143.         getch();
  144.         system ("cls");
  145.         cout << "constructor de copia" << endl;
  146.         getch();
  147.         system ("cls");
  148.         n=copialista.n;
  149.         lista= new contacto[n+1];
  150.         for (int i=0; i<n; i++){
  151.             lista[i]=copialista.lista[i];
  152.         }
  153.         return;
  154.     }  
  155.  
  156.     agenda operator+(agenda ag1){
  157.         agenda resul;
  158.         resul.lista= new contacto [n+1];
  159.         for (int i=0;i<n;i++){
  160.             resul.lista[i]=ag1.lista[i];
  161.         }
  162.         return (resul);
  163.     }
  164.     agenda operator+=(contacto micontacto){
  165.         agenda resul,ag1(*this),ag2(micontacto);
  166.         resul=ag1+ag2;
  167.         return(resul);
  168.     }
  169.  
  170.     agenda operator=(agenda ag1){
  171.         ag1.n=n;
  172.         for (int i=0;i<ag1.n;i++){
  173.             lista[i]=ag1.lista[i];
  174.             n++;
  175.         }
  176.         return (*this);
  177.     }
  178.  
  179.  
  180.  
  181.     //mostrar todos los contactos de la agenda
  182.     friend ostream& operator << (ostream &medio, agenda ag1){
  183.  
  184.         if (ag1.n==0){
  185.             cout << "La lista de contactos esta vacia" << endl;
  186.         }else{
  187.  
  188.             for (int i=0;i<ag1.n;i++)cout << ag1.lista[i];
  189.         }
  190.         cout << endl << "Presiona una tecla para volver al menu";
  191.         getch();
  192.         return(medio);
  193.     }
  194.     void ordenar (void){
  195.         string compara1, compara2,comparanom1, comparanom2;
  196.  
  197.         contacto aux;
  198.         for (int i=0;i<n-1;i++){
  199.  
  200.             for (int j=i+1;j<n;j++){
  201.                 compara1=lista[i].apellidos;
  202.                 compara2=lista[j].apellidos;
  203.  
  204.                 if (compara1>compara2){
  205.                     aux=lista[i];
  206.                     lista[i]=lista[j];
  207.                     lista[j]=aux;
  208.                 }
  209.                 if (compara1==compara2){
  210.                     comparanom1=lista[i].nombre;
  211.                     comparanom2=lista[j].nombre;
  212.                     if (comparanom1>comparanom2){
  213.                         aux=lista[i];
  214.                         lista[i]=lista[j];
  215.                         lista[j]=aux;
  216.                     }
  217.                 }
  218.             }
  219.         }
  220.         return;
  221.     }
  222.  
  223.     // buscar un contacto en la agenda
  224.     void buscar (void){
  225.         system ("cls");
  226.         if (lista!=NULL){
  227.             cout << "Introduce el nombre del contacto: ";
  228.             getline (cin,buscarnombre);
  229.             for (int i=0;i<n;i++){
  230.                 if (lista[i].nombre==buscarnombre){
  231.                     cout << endl;
  232.                     cout << lista[i];
  233.                     centinela=false;
  234.                 }
  235.             }
  236.             if (centinela==true){
  237.                 cout << endl << "No existe ningun contacto con ese nombre";
  238.             }
  239.         }
  240.         cout << endl << "Presiona una tecla para volver al menu";
  241.         getch();
  242.         return;
  243.     }
  244. };
  245.  
  246. class menu{
  247.  
  248. private:
  249.     agenda miagenda;
  250.     contacto micontacto;
  251.     int eleccion;
  252. public:
  253.     int solicitar (void){
  254.         do{
  255.             system("cls");
  256.             cout << "1- Nuevo contacto" << endl;
  257.             cout << "2- Listar contactos" << endl;
  258.             cout << "3- Buscar contacto" << endl;
  259.             cout << "4- Salir" << endl << endl;
  260.             cout << "Introduce tu eleccion: ";
  261.             cin >> eleccion; cin.ignore();
  262.             system ("cls");
  263.         }while (eleccion<1 || eleccion>4);
  264.         return (eleccion);
  265.     }
  266.  
  267.     void seleccion (void){
  268.  
  269.         do{
  270.             eleccion=solicitar();
  271.             miagenda.ordenar();
  272.             switch(eleccion){
  273.             case 1:
  274.                 cin >> micontacto;
  275.                 miagenda+=micontacto;
  276.                 break;
  277.             case 2:
  278.                 cout << miagenda;
  279.                 break;
  280.             case 3:
  281.                 miagenda.buscar();
  282.                 break;
  283.             }
  284.         }while (eleccion!=4);
  285.     }
  286. };
  287.  
  288. int main (void){
  289.     menu m1;
  290.     m1.seleccion();
  291.     getch();
  292.     return(0);
  293. }

Última edición por fingeroso; 14/03/2011 a las 19:20