Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Problemilla con las clases

Estas en el tema de Problemilla con las clases en el foro de C/C++ en Foros del Web. Hola a todos, tengo el siguiente codigo, el problema es que no hace nada cuando deberia mostrar la "raza,color y fecha" del perro XD @import ...
  #1 (permalink)  
Antiguo 15/04/2014, 18:24
 
Fecha de Ingreso: febrero-2014
Mensajes: 107
Antigüedad: 5 años, 8 meses
Puntos: 0
Problemilla con las clases

Hola a todos, tengo el siguiente codigo, el problema es que no hace nada cuando deberia mostrar la "raza,color y fecha" del perro XD
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.      }
  12.    void ladrar ();
  13.    void sentarse();
  14.  private:
  15.   string raza,color;
  16.   int fecha;
  17. };
  18.  
  19. void Perro::ladrar(){
  20.  cout<<"guau guau guau";
  21. }
  22.  void Perro::sentarse(){
  23.  cout<<"que descanso";
  24. }
  25.  
  26. int main (){
  27.  Perro benji = Perro("chanda","blanco", 5);
  28.  Perro toby = Perro("pastor aleman","negro", 3);
  29.  }
  #2 (permalink)  
Antiguo 15/04/2014, 18:54
Principe_Azul
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problemilla con las clases

Hola, pues yo lo único que noto aquí dentro de mi ignorancia es esto:

Código C++:
Ver original
  1. int main (){
  2.  Perro benji = Perro("chanda","blanco", 5);
  3.  Perro toby = Perro("pastor aleman","negro", 3);
  4.  }

la última llave no está bien cerrada, debería quedar así:


Código C++:
Ver original
  1. int main (){
  2.  Perro benji = Perro("chanda","blanco", 5);
  3.  Perro toby = Perro("pastor aleman","negro", 3);
  4. }

Espero que esto te ayude!
Un saludo y suerte!!
  #3 (permalink)  
Antiguo 15/04/2014, 19:00
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 926
Antigüedad: 6 años, 1 mes
Puntos: 38
De acuerdo Respuesta: Problemilla con las clases

¿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

Última edición por vangodp; 15/04/2014 a las 20:01 Razón: He visto mas errores
  #4 (permalink)  
Antiguo 15/04/2014, 22:56
 
Fecha de Ingreso: febrero-2014
Mensajes: 107
Antigüedad: 5 años, 8 meses
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
  #5 (permalink)  
Antiguo 16/04/2014, 00:19
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 926
Antigüedad: 6 años, 1 mes
Puntos: 38
Respuesta: Problemilla con las clases

Cometes un tremendo error XD
Perro ( string raza, string color, int fecha ) {
raza = raza;
color = color;
fecha = fecha;
cout << raza << endl << color << endl << fecha << endl << endl;
}
fiate bien lo que estas haciendo :D
Si en una función creo una variable con el nombre raza.....

void funcion (int raza){

}

//y dentro de ella le pongo:

raza es igual a raza....


void funcion (int raza){
raza = raza;
}

Fíate que es un entero.

¿¿no estas metiendo raza en ella mismo??

Estas haciendo eso:


int main (){
int num = 100;
num = num;
cout << num;
}

XDDD

prueba imprimir pero con otras funciones no con el constructor.
Tienes ahí un lio de copones XDD

Te dejo un ejemplo para que veas que intento decirte:
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;    //¡ICORRECTO!Le asignas su valor a si misma
  9.             color = color;  //¡ICORRECTO!Le asignas su valor a si misma
  10.             fecha = fecha;  //¡ICORRECTO!Le asignas su valor a si misma
  11.             suRaza = raza;  //¡CORRECTA! ahora nos referimos a suRaza del objeto benji que creamos en main
  12.             //this->raza = raza; //¡CORRECTA! se distingue que this->raza es la raza de benji y raza es lo que recibes quita el // delante y comprueba que ahora si funciona XD
  13.             cout << "Estas impriiendo con el constructor."<<raza << endl << color << endl << fecha << endl << endl;
  14.         }
  15.         void getRaza()const{ cout << "Metodo getRaza: " << raza << "A que no sale nada antes de eso si no pones el this XD" << endl; }
  16.         void get_suRaza()const{ cout << "Metodo getsuRaza: " << suRaza << endl; }
  17.     private:
  18.         string raza;    //Raza nunca recibira nada si no ponemos el puntero this delante, (problemas de ambigüedad"2 variables con el mismo nombre")
  19.         string suRaza;  //Esta si funciona por que lo hicimos como es debido XDD
  20.  
  21. };
  22.  
  23.  
  24. int main () {
  25.     Perro benji ( "chanda", "blanco", 5 ); //inicializamos y se imprime lo que esta en el constructor
  26.  
  27.     benji.getRaza();        //Este no funciona(a menos que usemos this) por que la variable del objeto perro no recibió ningún valor y eso lo demuestra.
  28.     benji.get_suRaza();   //Este es el método correcto ya que usa la variable suRaza que esta debidamente inicializada en el constructor
  29.    
  30.  
  31. }




¿Si te pongo la función así la entiendes mejor?
void funcion (){
int raza = 100;
raza = raza;
}
es lo mismo que:
void funcion (int raza = 100){
raza = raza;
}
Solo que hay un numero inicializado y si no le pasas nada pues se mete el 100 que le decimos;

No va tirar ningún error ya que como dije antes estas imprimiendo dentro de la misma función y esa función si recibió el nombre de la raza.
Asignar una variable a ella mismo es legal en C++.

Tu estas creyendo que funciona pero es un error y el programa de arriba lo demuestra.
¡Mucho cuidado con eso!
Imprime las variables dentro y fuera del constructor para hacer comprobaciones de que tus programas funcionan correctamente.
Es buena practica poner su delante de las variables de la clase. O sea es mas comprensible y lo pillas rapido si a suRaza le quiero pasar unaRaza.
Si no pues tienes el this para eso y muchas mas cosas que veras adelante.
Hay quien ponga marcas delante como _raza o lo que sea para distinguir las variables de la clase de las de las funciones.

this es un puntero que se crea de forma no transparente al programador.
Pero debes saber que esta ahi, cuando creas un objeto de tipo Perro se crea automaticamente el puntero this, y ese puntero apunta al propio objeto creado.
Te puede salvar de varios apuros, y el puntero this es mas importante de lo que crees, va a ser como tu novia ya lo veras XDD


Si no entiendes sigue preguntando no te cortes pa eso estamos ;)

Última edición por vangodp; 16/04/2014 a las 01:05
  #6 (permalink)  
Antiguo 17/04/2014, 22:45
 
Fecha de Ingreso: febrero-2014
Mensajes: 107
Antigüedad: 5 años, 8 meses
Puntos: 0
Respuesta: Problemilla con las clases

Si man ahora si entendi, pero ahora me surge otra duda tengo este mismo codigo pero ahora tengo un destructor, lo que no se es porque se ejecuta 3 veces el destuctor.
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.  
  12.      cout<<raza<<endl<<color<<endl<<fecha<<endl<<endl;
  13.      }
  14.    ~Perro(){
  15.     cout<<"objeto perro destruido\n";
  16.    }
  17.    void ladrar ();
  18.    void sentarse();
  19.  private:
  20.   string raza,color;
  21.   int fecha;
  22. };
  23.  
  24. void Perro::ladrar(){
  25.  cout<<"guau guau guau\n";
  26. }
  27.  void Perro::sentarse(){
  28.  cout<<"que descanso\n";
  29. }
  30.  
  31. int main (){
  32.  Perro benji = Perro("chanda","blanco", 5);
  33.  Perro toby = Perro("pastor aleman","negro", 3);
  34.  benji.sentarse();
  35.  benji.~Perro();
  36. }
Cita:
Iniciado por vangodp Ver Mensaje
Cometes un tremendo error XD
Perro ( string raza, string color, int fecha ) {
raza = raza;
color = color;
fecha = fecha;
cout << raza << endl << color << endl << fecha << endl << endl;
}
fiate bien lo que estas haciendo :D
Si en una función creo una variable con el nombre raza.....

void funcion (int raza){

}

//y dentro de ella le pongo:

raza es igual a raza....


void funcion (int raza){
raza = raza;
}

Fíate que es un entero.

¿¿no estas metiendo raza en ella mismo??

Estas haciendo eso:


int main (){
int num = 100;
num = num;
cout << num;
}

XDDD

prueba imprimir pero con otras funciones no con el constructor.
Tienes ahí un lio de copones XDD

Te dejo un ejemplo para que veas que intento decirte:
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;    //¡ICORRECTO!Le asignas su valor a si misma
  9.             color = color;  //¡ICORRECTO!Le asignas su valor a si misma
  10.             fecha = fecha;  //¡ICORRECTO!Le asignas su valor a si misma
  11.             suRaza = raza;  //¡CORRECTA! ahora nos referimos a suRaza del objeto benji que creamos en main
  12.             //this->raza = raza; //¡CORRECTA! se distingue que this->raza es la raza de benji y raza es lo que recibes quita el // delante y comprueba que ahora si funciona XD
  13.             cout << "Estas impriiendo con el constructor."<<raza << endl << color << endl << fecha << endl << endl;
  14.         }
  15.         void getRaza()const{ cout << "Metodo getRaza: " << raza << "A que no sale nada antes de eso si no pones el this XD" << endl; }
  16.         void get_suRaza()const{ cout << "Metodo getsuRaza: " << suRaza << endl; }
  17.     private:
  18.         string raza;    //Raza nunca recibira nada si no ponemos el puntero this delante, (problemas de ambigüedad"2 variables con el mismo nombre")
  19.         string suRaza;  //Esta si funciona por que lo hicimos como es debido XDD
  20.  
  21. };
  22.  
  23.  
  24. int main () {
  25.     Perro benji ( "chanda", "blanco", 5 ); //inicializamos y se imprime lo que esta en el constructor
  26.  
  27.     benji.getRaza();        //Este no funciona(a menos que usemos this) por que la variable del objeto perro no recibió ningún valor y eso lo demuestra.
  28.     benji.get_suRaza();   //Este es el método correcto ya que usa la variable suRaza que esta debidamente inicializada en el constructor
  29.    
  30.  
  31. }




¿Si te pongo la función así la entiendes mejor?
void funcion (){
int raza = 100;
raza = raza;
}
es lo mismo que:
void funcion (int raza = 100){
raza = raza;
}
Solo que hay un numero inicializado y si no le pasas nada pues se mete el 100 que le decimos;

No va tirar ningún error ya que como dije antes estas imprimiendo dentro de la misma función y esa función si recibió el nombre de la raza.
Asignar una variable a ella mismo es legal en C++.

Tu estas creyendo que funciona pero es un error y el programa de arriba lo demuestra.
¡Mucho cuidado con eso!
Imprime las variables dentro y fuera del constructor para hacer comprobaciones de que tus programas funcionan correctamente.
Es buena practica poner su delante de las variables de la clase. O sea es mas comprensible y lo pillas rapido si a suRaza le quiero pasar unaRaza.
Si no pues tienes el this para eso y muchas mas cosas que veras adelante.
Hay quien ponga marcas delante como _raza o lo que sea para distinguir las variables de la clase de las de las funciones.

this es un puntero que se crea de forma no transparente al programador.
Pero debes saber que esta ahi, cuando creas un objeto de tipo Perro se crea automaticamente el puntero this, y ese puntero apunta al propio objeto creado.
Te puede salvar de varios apuros, y el puntero this es mas importante de lo que crees, va a ser como tu novia ya lo veras XDD


Si no entiendes sigue preguntando no te cortes pa eso estamos ;)
  #7 (permalink)  
Antiguo 17/04/2014, 23:37
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 926
Antigüedad: 6 años, 1 mes
Puntos: 38
Respuesta: Problemilla con las clases

No se que quieres lograr con:
Perro benji = Perro("chanda","blanco", 5);

Con Perro benji estas creando un Objeto de tipo Perro se puede decir que es una copia de Perro.
Con Perro("chanda","blanco", 5); intentas acceder sin crear el objeto, es como pillar la clase directo invocar su constructor y pasas ("chanda","blanco", 5). No se si eso es posible normalmente se trabaja sobre objetos y no propiamente la clase en si.
Pero si fuera posible es perfectamente comprensible el por que tienes 3 destructores. Tienes 3 destructores por que uno pertenece a Perro, otro a benji y otro a toby.
Como dije antes cuando haces Perro benji has creado en memoria una copia de Perroi con todos sus métodos y atributos incluido constructores y destructores pero estos últimos pasan a tener el nombre del objeto creado.

En vez de hacer: Perro benji = Perro("chanda","blanco", 5);
Prueba: Perro benji ("chanda","blanco", 5);
Cuando creas un objeto, ese ya no lleva el nombre de la clase(Perro) sino su propio nombre, o sea que si el constructor de la clase Perro es Perro("chanda","blanco", 5); el constructor de benji es su propio nombre benji("chanda","blanco", 5);

Prueba Esto:
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.             cout << suRaza << " creado!" << endl;
  12.         }
  13.         ~Perro() { cout << suRaza << " destruido\n"; }
  14.         void  ladrar () const;
  15.         void sentarse() const;
  16.         void  getinfo() const;
  17.     private:
  18.         string suRaza, suColor;
  19.         int suEdad;
  20. };
  21.  
  22. void Perro::ladrar() const {
  23.     cout << "guau guau guau";
  24. }
  25.  
  26. void Perro::sentarse() const {
  27.     cout << "que descanso";
  28. }
  29.  
  30. void Perro::getinfo() const {
  31.     cout << "La raza es: " << suRaza  << endl;
  32.     cout << "El color es: " << suColor << endl;
  33.     cout << "La edad es: " << suEdad  << endl;
  34. }
  35.  
  36. int main () {
  37.     Perro( "papanatas", "trasparente", 100 );
  38.     Perro benji ( "chanda", "blanco", 5 );
  39.     Perro toby ( "pastor aleman", "negro", 3 );
  40.  
  41.     cin.ignore();
  42. }

Última edición por vangodp; 17/04/2014 a las 23:51

Etiquetas: clases, int, string
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 06:22.