Ver Mensaje Individual
  #4 (permalink)  
Antiguo 15/04/2014, 21:56
shikamarucb
 
Fecha de Ingreso: febrero-2014
Mensajes: 107
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Problemilla con las clases

Man ya vi mi error en el codigo, y la troilada que hice fue que no imprimi XD, yo lo deje asi, pero tambien me generas una duda, yo no use el this->, pero igual lo distingue???
Código C++:
Ver original
  1. #include <iostream>
  2.     #include <stdlib.h>
  3.     using namespace std;
  4.      
  5.     class Perro{
  6.      public:
  7.        Perro(string raza,string color, int fecha){
  8.          raza = raza;
  9.          color = color;
  10.          fecha = fecha;
  11.         cout<<raza<<endl<<color<<endl<<fecha<<endl<<endl;
  12.          }
  13.        void ladrar ();
  14.        void sentarse();
  15.      private:
  16.       string raza,color;
  17.       int fecha;
  18.     };
  19.      
  20.     void Perro::ladrar(){
  21.      cout<<"guau guau guau";
  22.     }
  23.      void Perro::sentarse(){
  24.      cout<<"que descanso";
  25.     }
  26.      
  27.     int main (){
  28.      Perro benji = Perro("chanda","blanco", 5);
  29.      Perro toby = Perro("pastor aleman","negro", 3);
  30.      }
Cita:
Iniciado por vangodp Ver Mensaje
¿donde están los métodos que te devuelva eso que dices?
Solo veo 2 y ninguno te devuelve "raza, color y fecha".
Debes hacerlo o puede que no ayas copiado bien.
Lo unico que puedes hacer es guauguauguau y que descanso XDDD

void Perro::ladrar(){
cout<<"guau guau guau";
}
void Perro::sentarse(){
cout<<"que descanso";
}

falta la función que te imprima o lo que sea eso que dices ;)

Edito:
Bueno mirando mas afondo había mas errores y muymuy chungos XDDD
En el constructor de perro le vas a volver loco el compilador XDD
Perro(string raza,string color, int fecha){
raza = raza; //El compilador no distingue cual le asiganas a cual
color = color; //El compilador no distingue cual le asiganas a cual
fecha = fecha; //El compilador no distingue cual le asiganas a cual

}
Si a cambio usas algo que diferencie las variables de la clase de las de la función.
yo suelo poner su delante de las variables de la clase ejemplo "suRaza". Así dejo claro que se trata de la raza del perro.
Cuando invocamos el constructor de perro le pasamos "unaRaza" a "suRaza", creo que queda mas claro pois es mas facil para el compilador entender suRaza = unaRaza; que raza = raza;
Aun así c++ proviene de un sistema para resolver problemas de ambigüedad, se llama el puntero this, pero creo que ya va a ser mucho para ti o no lo se.
this->raza = raza;

Te paso todo el ejemplo con su para distinguir y mas abajo con el puntero this también.
Código C++:
Ver original
  1. #include <iostream>
  2. #include <stdlib.h>
  3. using namespace std;
  4.  
  5. class Perro {
  6.     public:
  7.         Perro ( string unaRaza, string unColor, int unaEdad ) {
  8.             suRaza  = unaRaza;
  9.             suColor = unColor;
  10.             suEdad  = unaEdad;
  11.         }
  12.         void  ladrar () const;
  13.         void sentarse() const;
  14.         void  getinfo() const;
  15.     private:
  16.         string suRaza, suColor;
  17.         int suEdad;
  18. };
  19.  
  20. void Perro::ladrar() const {
  21.     cout << "guau guau guau";
  22. }
  23.  
  24. void Perro::sentarse() const {
  25.     cout << "que descanso";
  26. }
  27.  
  28. void Perro::getinfo() const {
  29.     cout << "La raza es: " << suRaza  << endl;
  30.     cout << "El color es: "<< suColor << endl;
  31.     cout << "La edad es: " << suEdad  << endl;
  32. }
  33.  
  34. int main () {
  35.     Perro benji = Perro ( "chanda", "blanco", 5 );
  36.     benji.getinfo();
  37.     cout << endl;
  38.     Perro toby = Perro ( "pastor aleman", "negro", 3 );
  39.     toby.getinfo();
  40.    
  41.     cin.ignore();
  42. }


Ahora el ejemplo que resuelve el problema de la ambigüedad.
Recuérdelo: this es un puntero que apunta a su propio objeto creado. Si ponemos this delante de una variable nos referimos a la variable que pertenece a ese mismo objeto.

Si le pasamos una raza a raza eso es invalido por que el compilador no sabe cual es cual.

Sin embargo si pongo this->raza, me refiero a la variable raza del "OBJETO" perro y eso si es valido.
Entonces si en una función intentamos pasar una raza a su raza y las 2 se llaman iguales con el puntero distinguimos una de otra.
Ejemplo this:
Código C++:
Ver original
  1. #include <iostream>
  2. #include <stdlib.h>
  3. using namespace std;
  4.  
  5. class Perro {
  6.     public:
  7.         Perro ( string raza, string color, int fecha ) {
  8.             this->raza = raza;       //this apunta al objeto perro eso distingue raza que le pasamos de la raza del objeto perro
  9.             this->color = color;     //this apunta al objeto perro eso distingue raza que le pasamos de la raza del objeto perro
  10.             this->fecha = fecha;     //this apunta al objeto perro eso distingue raza que le pasamos de la raza del objeto perro
  11.         }
  12.         void  ladrar () const;
  13.         void sentarse() const;
  14.         void  getinfo() const;
  15.        
  16.     private:
  17.         string raza, color;
  18.         int fecha;
  19. };
  20. void Perro::ladrar() const {
  21.     cout << "guau guau guau";
  22. }
  23.  
  24. void Perro::sentarse() const {
  25.     cout << "que descanso";
  26. }
  27.  
  28. void Perro::getinfo() const {
  29.     cout << "La raza es: " << raza  << endl;
  30.     cout << "El color es: " << color << endl;
  31.     cout << "La edad es: " << fecha  << endl;
  32. }
  33.  
  34. int main () {
  35.     Perro benji = Perro ( "chanda", "blanco", 5 );
  36.     benji.getinfo();
  37.     cout << endl;
  38.     Perro toby = Perro ( "pastor aleman", "negro", 3 );
  39.     toby.getinfo();
  40.    
  41.     cin.ignore();
  42. }
ahora si salu