Ver Mensaje Individual
  #12 (permalink)  
Antiguo 15/04/2015, 05:22
dmorill
 
Fecha de Ingreso: junio-2014
Mensajes: 144
Antigüedad: 9 años, 10 meses
Puntos: 1
Respuesta: ¿Para qué necesito un Constructor? (Sí, novato inside XD).

Hola,

Cita:
Iniciado por BramSt Ver Mensaje
¿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

Código C++:
Ver original
  1. punto p1(1,2), p2(9,8), p3(10,20)

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 original
  1. punto p1,p2,p3;
  2. p1._x =1; p2._y =2
  3. p1._x =9; p2._y =8
  4. 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
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct punto{
  5.     int _x = 1;
  6.     int _y = 5;
  7.     punto(int x, int y);
  8. };
  9. punto::punto(int x, int y){
  10.     _x = x, _y = y;
  11. }
  12.  
  13.  
  14. int main(){
  15.     punto p;    //te saltará un erro aquí
  16.     cout << p._x << " " << p._y << " mostrando couts" << endl;
  17.  
  18.     cin.sync();
  19.     cin.get();
  20.     return 0;
  21. }
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
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct punto{
  5.     int _x = 1;
  6.     int _y = 5;
  7.     punto();
  8.     punto(int x, int y);
  9. };
  10. punto::punto(){
  11.     _x = 0; _y = 0;
  12. }
  13. punto::punto(int x, int y){
  14.     _x = x, _y = y;
  15. }
  16.  
  17.  
  18. int main(){
  19.     punto p;    //ya no hay error
  20.     punto p(10, 20), p1(50, 80); //y puedes crear puntos y inicializarlos así de fácil
  21.     cout << p._x << " " << p._y << " mostrando couts" << endl;
  22.  
  23.     cin.sync();
  24.     cin.get();
  25.     return 0;
  26. }

saludos