Tengo una duda de curiosidad.
Dispongo de dos libros diferentes sobre C++. Al revisar el tema constructores plantea uno de ellos que cada clase tiene al menos un constructor. De no definirse uno por quien escribe el código, coloca el compilador un constructor por defecto, o sea: Constructor(){}, automáticamente.
El otro libro, que hasta ahora me ha parecido bastante mejor que el recién señalado, dice que cada clase puede tener ninguno, uno o más constructores. NO dice que el compilador establece, en caso de ausencia plena de uno explícitamente definido, uno implícitamente. De lo contrario, el programa puede funcionar, pero pueden surgir problemas con la inicialización del objeto y en general con el funcionamiento del programa, dado que el sistema de ejecución asume un constructor por defecto.
Así que me he puesto a googlear... Y he visto que en varias partes se sostiene lo mismo que en el primer libro referido.
Ahora bien, no soy novata, pero estoy lejos de ser diestra en C++ OOP.
Sin embargo, hice un experimento, para determinar cuál de ambos puntos de vista, es el correcto.
Escribí un pequeño código de prueba una vez sin y una vez con la declaración explícita de un constructor por defecto.
A continuación el programa con un objeto poco afín al trabajo pero hablador sin haber declarado un constructor:
Código
#include <iostream> using namespace std; class Constuctor { private: void funktion_work() { cout << "I have to work... Buhhhh" << endl; } protected: void funktion_lenguagesConstuctor() { cout << "I can english." << endl; cout << "I can deutsch." << endl; cout << "I can espaniol." << endl; } public: void funktion_lenguagesConstuctor_public() { funktion_lenguagesConstuctor(); } }; int main(int argc, char **argv){ Constuctor constructor; constructor.funktion_lenguagesConstuctor_public(); return 0; }
Y a continuación, lo mismo pero con un constructor explícitamente declarado (línea 21):
Código
#include <iostream> using namespace std; class Constuctor { private: void funktion_work() { cout << "I have to work... Buhhhh" << endl; } protected: void funktion_lenguagesConstuctor() { cout << "I can english." << endl; cout << "I can deutsch." << endl; cout << "I can espaniol." << endl; } public: Constuctor(){} void funktion_lenguagesConstuctor_public() { funktion_lenguagesConstuctor(); } }; int main(int argc, char **argv){ Constuctor constructor; constructor.funktion_lenguagesConstuctor_public(); return 0; }
Lo que me parece interesante es que el programa resultante es más pesado cuando tiene un constructor explícitamente declarado:
Peso del ejecutable sin constructor declarado: 21472 Bytes
Peso del ejecutable con constructor declarado: 21856 Bytes
La diferencia es de 384 Bytes.
De acuerdo a los pesos del ejecutable tendría razón el libro que no señala la existencia de un constructor implícito colocado por el compilador y que hasta ahora me ha parecido un libro excelente.
Sin embargo, como ya decía, el otro libro y una gran parte de los textos en google dicen lo contrario.
Estoy confusa...
Alguien tiene alguna mayor claridad sobre este tema?
Muy agradecida por vuestros comentarios me despido,
Gisi