A ver en tu caso nada. En C++ las estructuras son parecidas a las clases pero con todos sus miembros públicos. ¿Que quiere decir eso? pues que puedes hacer eso que haces. a = b;
Pero en las clases no lo puedes hacer si no especificas claramente que esos datos son públicos.
Creo que te puse cosas que se adelantan a lo que estas viendo. En tu caso ves estructuras, y las estructuras tienen sus atributos como públicos. O sea que no necesitas constructores. O lo que es lo mismo que te ha dicho lareto "Nada"... No tiene nada que ver. Pero como preguntabas por constructores por defecto te los puse.
Ahora te ilustro con ejemplos:
Este ejemplo es con constructores:
Código C++:
Ver original#include <iostream>
using namespace std;
struct Datos{
int n = 10; //valor inicial
};
int main (){
//Creo un objeto de la estructura
Datos d;
//imprimo lol
cout << d.n << endl;
//hago mis cosillas
d.n = 200;
//imprimo nuevamente...
cout << "ahora cambio el valor: " << d.n << endl; //facil... ya ta. ¿Nada nuevo no? nos vemos al seguiente
cin.ignore();
return 0;
}
Nada nuevo. No necesito constructores
Ahora veamos lo mismo pero con clases. Las clases y las estructuras se parecen
Código C++:
Ver original#include <iostream>
using namespace std;
class Datos{ //Solo cambio struct por class y tengo clases. Pero es privada
int n = 10; //puedo dar valor inicial igualmente
};
int main (){
//todas las lineas que intentan acceder a la clase marcan error. Puedes comprobar comentandolas todas. Es por que es privada la clase si no se especifica otra cosa.
Datos d;
cout << d.n << endl;
d.n = 200;
cout << "ahora cambio el valor: " << d.n << endl;
cin.ignore();
return 0;
}
El codigo anterior marca error ya que una clase si que da error si no le decimos que es publica.
Miere el seguiente código:
Código C++:
Ver original#include <iostream>
using namespace std;
class Datos{
public: //Al decir que es public tu clase ahora se parece a una estructura. No le veo diferencias... ¡Prueba!
int n = 10;
};
int main (){
Datos d;
cout << d.n << endl;
d.n = 200;
cout << "ahora cambio el valor: " << d.n << endl;
cin.ignore();
return 0;
}
En el ejemplo anterior al declarar los miembros como publicos, se asemeja a tu estructura. Eso demuestra que las estructuras en C++ se asemejan a las clases, pero con sus miembros públicos.
Ahora el ejemplo del por que usar constructores por defecto.
Código C++:
Ver original#include <iostream>
using namespace std;
class Datos{
private: // Ojo! Ahora digo que es privada. No funciona si intento acceder a los miembros.
int n = 10;
public: // su constructor si es publico
Datos( int otroN ){ n = otroN; }
int getN (){ return n; } //n al estar como privado no le puedo acceder directamente, pero la funcion getN() nos va retornar el numero por nosotros.
};
int main (){
Datos a(100);
cout << "a.n: " << a.getN() << endl; //getN devuelve la n de a aun que sea privada. Eso es asi por que puedo acceder a la parte privada desde la publica. Quizas sea muy avanzado para ti eso, no te preucupes por eso ahora ;)
Datos b = a; //Eso es un constructor de copia. Aun que use como si de una simple variable se tratara es un constructor. b ahora vale lo mismo que a
cout << "b.n: " << b.getN() << endl;
cin.ignore();
return 0;
}
Para eso se usan los constructores.
Código C++:
Ver original#include <iostream>
using namespace std;
class Datos{
public: //volvemos publica la clase
int n = 10;
};
int main (){
Datos a;
a.n = 100;
cout << "a.n: " << a.n << endl;
//Esto equivale al ejemplo anterior: Datos b = a; O sea es un constructor de copia.
Datos b(a);
cout << "b.n: " << b.n << endl;
cin.ignore();
return 0;
}
Código C++:
Ver original#include <iostream>
using namespace std;
struct Datos{
Datos ( int otroA, int otroB, int otroC, int otroD, int otroE ){
a = otroA; b = otroB; c = otroC; d = otroD; e = otroE;
}
void imprimir(){
cout << a << ", "<< b << ", "<< c << ", "<< d << ", "<< e << endl;
}
int a;
int b;
int c;
int d;
int e; // podiamos tener 100 datos XDD
};
int main (){
Datos a(100,200,300,400,500); //volvemos a ser una estructura. Pero podemos usar constructores.
a.imprimir();
cin.ignore();
return 0;
}
Ahora creo que ya te debería quedar algo más claro lo de los constructores.
Aun que sean structs puedes usar constructores. ¿Que es mas fácil, datos.a = 100; datos.b = 200; datos.c = 300;? .... ¿O Datos datos(100, 200, 300, 400, 500)?
En una estructura como la tuya a lo mejor no te conviene usar nada de eso, ni falta te hace. Pero los constructores están para usarlos. Ahora que te vangan y te digan que no tienen nada a ver y que este foro es poco fiable... Algunos tenemos más exp que otros, pero nunca he salido de un foro de programación con dudas. No se por que algunos tienen tan poca fé en los compañeros >_<.