Ver Mensaje Individual
  #22 (permalink)  
Antiguo 16/04/2015, 02:03
amchacon
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 11 años, 10 meses
Puntos: 28
Respuesta: ¿Para qué necesito un Constructor? (Sí, novato inside XD).

Pero no te pongas a explicarle lo de inline Vangodp, que entonces ya se lía xD

Cita:
Estoy usando, sin saberlo (sin saberlo yo al menos XD), un constructor por defecto que el compilador crea y llama de forma automática, ¿no es así?
C++ obliga a llamar al constructor cuando se crea un objeto. Eso implica que tiene que haber un constructor obligatoriamente (sino, no lo puedes llamar xD).

Ahora bien, en este caso:
Código C++:
Ver original
  1. struct punto{
  2.  
  3.     int a=8;
  4.     int b=10;
  5.  
  6. };

No hay constructores que llamar, aquí el compilador te echa una mano y te lo genera él mismo:

Código C++:
Ver original
  1. struct punto{
  2.  
  3.     int a;
  4.     int b;
  5.  
  6.    punto()
  7.    {
  8.         a = 8;
  9.         b = 10;
  10.    }
  11.  
  12. };


Cita:
Es que primero necesito saber para aclararme:

punto p es una declaración de una variable u objeto de tipo "punto" (como un "int a" de toda la vida, vaya), o es un constructor en sí mismo? Es que claro, con eso de los constructores de copia que se asignaban como variables me descoloco un poco...
punto p crea un objeto de tipo punto.

Otra cosa esque el compilador llame al constructor para crear el objeto.

Cita:
Después, en caso de ser un constructor, ¿es por su especial naturaleza de constructor que, al ser un constructor por defecto, se le llame usando "punto p" y no "punto p()" como entiendo que se haría con cualquier función sin parámetros "normal"?
Sí, es una excepción a la norma.

Tiene dos justificaciones:

- Retrocompatibilidad con C: Las estructuras de C deben seguir funcionando en C++, y ahí no llevaban paréntesis.
- Ambiguedad: punto p() se puede interpretar también como la declaración de una función que devuelve un punto.

Cita:
Después también me choca que para definir el constructor fuera de la estructura, haya que volver a "redeclarar" sus parámetros, de tenerlos... pero eso supongo que es que me tengo que estudiar bien las funciones.
La razón es sencilla: Ambiguedad.

Puedes tener varios constructores, y el compilador tiene que saber a cual te refieres.

Código C++:
Ver original
  1. struct punto{
  2.  
  3.     int a;
  4.     int b;
  5.  
  6.    punto();
  7.    punto(int x,int y);
  8. };
  9.  
  10. punto::punto()      // Constructor sin parámetros
  11. {
  12.     a = 0;
  13.     b = 0;
  14. }
  15.  
  16. punto::punto(int x,int y)     // Constructor con dos enteros
  17. {
  18.      a = x;
  19.      b = y;
  20. }