Hola,
Cita:
Iniciado por BramSt ¿Qué pinta el constructor en todo esto? Si no lo necesito para inicializar los miembros de la estructura, que es para lo que se supone que sirve, ¿para qué lo quiero?
XD
La idea era que te des cuenta que si definimos nosotros un constructor, éste se llamará automáticamente en el momento que se crea la estructura o el objeto. Sin importar que asignes valores a los atributos. Qué pasa cuando tu no defines el constructor, pues tengo entendido que el compilador te crea uno automáticamente, por eso puedes crear una estructura o una clase sin ponerlo.
Para qué lo quieres? imagínate que quieres crear 3 puntos en 1,2 ; 9, 8 y 10 20, con un constructor como el que te puse en el ejemplo sólo tendrías que poner
Mientras que si tu lo asignas lo haces con un sólo valor. Claro tu me podrías decir que puedes poner esto:
Código C++:
Ver originalpunto p1,p2,p3;
p1._x =1; p2._y =2
p1._x =9; p2._y =8
p1._x =10; p2._y =20
si se puede pero como te das cuenta es mucho más largo, y ya que siempre se llama a un constructor pues es preferible usarlo.
Ahora bien, mira este código:
Código C++:
Ver original#include <iostream>
using namespace std;
struct punto{
int _x = 1;
int _y = 5;
punto(int x, int y);
};
punto::punto(int x, int y){
_x = x, _y = y;
}
int main(){
punto p; //te saltará un erro aquí
cout << p._x << " " << p._y << " mostrando couts" << endl;
cin.sync();
cin.get();
return 0;
}
Cuando construyas "punto p"te saldrá un error pues tu has definido un constructor que requiere dos int, y al llamarlo sólo con p no se los estas suministrando, se podría pensar que si no se los doy pues que tomen el valor de 1, 5. Pero no el compilador te daría error pues el constructor que intenta llamar requiere parámetros.
Para arreglarlo podrías definir otro constructor que se el por defecto (teniendo dos constructores para tu estructura):
Código C++:
Ver original#include <iostream>
using namespace std;
struct punto{
int _x = 1;
int _y = 5;
punto();
punto(int x, int y);
};
punto::punto(){
_x = 0; _y = 0;
}
punto::punto(int x, int y){
_x = x, _y = y;
}
int main(){
punto p; //ya no hay error
punto p(10, 20), p1(50, 80); //y puedes crear puntos y inicializarlos así de fácil
cout << p._x << " " << p._y << " mostrando couts" << endl;
cin.sync();
cin.get();
return 0;
}
saludos