Ver Mensaje Individual
  #5 (permalink)  
Antiguo 15/04/2014, 23:19
Avatar de vangodp
vangodp
 
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 5 meses
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 00:05