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#include <iostream>
#include <stdlib.h>
using namespace std;
class Perro {
public:
Perro ( string raza, string color, int fecha ) {
raza = raza; //¡ICORRECTO!Le asignas su valor a si misma
color = color; //¡ICORRECTO!Le asignas su valor a si misma
fecha = fecha; //¡ICORRECTO!Le asignas su valor a si misma
suRaza = raza; //¡CORRECTA! ahora nos referimos a suRaza del objeto benji que creamos en main
//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
cout << "Estas impriiendo con el constructor."<<raza << endl << color << endl << fecha << endl << endl;
}
void getRaza()const{ cout << "Metodo getRaza: " << raza << "A que no sale nada antes de eso si no pones el this XD" << endl; }
void get_suRaza()const{ cout << "Metodo getsuRaza: " << suRaza << endl; }
private:
string raza; //Raza nunca recibira nada si no ponemos el puntero this delante, (problemas de ambigüedad"2 variables con el mismo nombre")
string suRaza; //Esta si funciona por que lo hicimos como es debido XDD
};
int main () {
Perro benji ( "chanda", "blanco", 5 ); //inicializamos y se imprime lo que esta en el constructor
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.
benji.get_suRaza(); //Este es el método correcto ya que usa la variable suRaza que esta debidamente inicializada en el constructor
}
¿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 ;)