Código C++:
Ver original#include <iostream>
#include <windows.h>
using namespace std;
class Perro;
class Perro {
public:
//Metodos constructores
//Costructor por defecto
Perro () {
suEdad = 0;
suPeso = 0;
suNombre = "No tiene nombre";
suRaza = "No tiene raza";
}
//Constructor con parametros
Perro ( int unaEdad, int unPeso, string unNombre, string unaRaza ) {
suEdad = unaEdad;
suPeso = unPeso;
suNombre = unNombre;
suRaza = unaRaza;
}
//Constructor de copia
Perro ( Perro &unPerro ) {
suEdad = unPerro.suEdad;
suPeso = unPerro.suPeso;
suNombre = unPerro.suNombre;
suRaza = unPerro.suRaza;
}
//Metodos destructores
~Perro() {} //destructor por defecto
//metodos geters "obtener"
int getEdad () const { return suEdad; }
int getPeso () const { return suPeso; }
string getNombre() const { return suNombre; }
string getRaza () const { return suRaza; }
//Metodos seters "entrada de datos"
void setEdad ( int unaEdad ) { suEdad = unaEdad; }
void setPeso ( int unPeso ) { suPeso = unPeso; }
void setNombre ( string unNombre ) { suNombre = unNombre; }
void setRaza ( string unaRaza ) { suRaza = unaRaza; }
//Otros metodos
void ladrar() { std::cout << "aroof roof!XD" << endl; }
//La parte privada de perro"No podemos acceder desde fuera de la clase"
private:
//Atributos
int suEdad;
int suPeso;
string suNombre;
string suRaza;
}; //Fin de la idea perro "Esta es la clase no el objeto"
int main () {
system ( "MODE CON cols=100 lines=50" );
Perro miPerro; //Creamos copia de la clase Perro "Constructor por defecto"
Perro otroPerro ( 3, 7, "Rex", "Pitbull" ),Dog(otroPerro); //Creamos copia de la clase Perro "Constructor con parametros" ¡Y! Creamos otro Perro "Dog" usando el constructor de copias que hemos implementado ;)
cout << miPerro.getNombre() << endl; //miPerro no tiene ningun dato aparte de los de por defecto "No tiene Nombre"
cout << otroPerro.getNombre() << endl; //otroPerro si tiene nombre y se llama Rex
//Con es constructor de copia puedes hacerlo ;)
miPerro = otroPerro; //Mi perro ha ganado todos los datos de otroPerro "Constructor de copia"
cout << miPerro.getNombre() << "se llama miPerro, ahora tambien se llama Rex y es identico a otroPerro: " << endl;//Ahora miPerro tiene nombre que es igual al de otroPerro "Rex"
cout << "Este es Dog que es una copia de otroPerro y su nombre es: " << Dog.getNombre() << endl;
//Puedes hacer copias del Perro que te apetesca usando el Constructor de copias.
//Algunos ejemplos
Perro unDog2(otroPerro);
Perro papaNatas = otroPerro;
Perro hotDog;
hotDog = otroPerro;
cout << "unDog2: " << unDog2.getNombre() << endl;
cout << "papaNatas: " << papaNatas.getNombre() << endl;
cout << "hotDog: " << hotDog.getNombre() << endl;
cin.ignore();
}
Poder se puede pero si no invocas al constructor de copias te va entrar los Datos por defecto por que es como hacer eso:
int num1 = 10, num2;
No tiene por que num2 tomar el valor de num1 a menos que haga eso:
int num1 = 10, num2 = num1;
recuerda que cpp hace la asignacion de de arriba abajo y de izquierda a derecha lo lo que esto: int num1 = 10, num2 = num1;
va en ese orden:
1º num1=10
2º num2=num1
Asi funciona mas o menos:
Perro otroPerro ( 3, 7, "Rex", "Pitbull" ),Dog(otroPerro);
Si le creo asi:
Perro otroPerro ( 3, 7, "Rex", "Pitbull" ),Dog;
no tiene por que ganar el valor de la izquierda de la coma ;), para eso necesitas un constructor de copias.
Si no elijes un constructor recuerda que va pillar siempre "El constructor por defecto" XDDD https://www.youtube.com/watch?v=MDXbFIlVEb8