elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  C++ OOP constructor implicito - ¿se crea automaticamente un constructor implicit
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: C++ OOP constructor implicito - ¿se crea automaticamente un constructor implicit  (Leído 2,875 veces)
GisiNA

Desconectado Desconectado

Mensajes: 30


Ver Perfil
C++ OOP constructor implicito - ¿se crea automaticamente un constructor implicit
« en: 13 Abril 2017, 18:40 pm »

Hola a todos!

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
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Constuctor
  6. {
  7.    private:
  8. void funktion_work()
  9. { cout << "I have to work... Buhhhh" << endl;  }
  10.  
  11.   protected:
  12. void funktion_lenguagesConstuctor()
  13. { cout << "I can english." << endl;
  14. cout << "I can deutsch." << endl;
  15. cout << "I can espaniol." << endl;
  16. }
  17.  
  18.   public:
  19.  
  20. void funktion_lenguagesConstuctor_public()
  21. {
  22. funktion_lenguagesConstuctor();
  23. }
  24. };
  25.  
  26. int main(int argc, char **argv){
  27.  
  28. Constuctor constructor;
  29. constructor.funktion_lenguagesConstuctor_public();
  30.  
  31. return 0;
  32. }
  33.  

Y a continuación, lo mismo pero con un constructor explícitamente declarado (línea 21):

Código
  1.  
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. class Constuctor
  7. {
  8.    private:
  9. void funktion_work()
  10. { cout << "I have to work... Buhhhh" << endl;  }
  11.  
  12.   protected:
  13. void funktion_lenguagesConstuctor()
  14. { cout << "I can english." << endl;
  15. cout << "I can deutsch." << endl;
  16. cout << "I can espaniol." << endl;
  17. }
  18.  
  19.   public:
  20.  
  21. Constuctor(){}
  22. void funktion_lenguagesConstuctor_public()
  23. {
  24. funktion_lenguagesConstuctor();
  25. }
  26. };
  27.  
  28. int main(int argc, char **argv){
  29.  
  30. Constuctor constructor;
  31. constructor.funktion_lenguagesConstuctor_public();
  32.  
  33. return 0;
  34. }
  35.  
  36.  

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


En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: C++ OOP constructor implicito - ¿se crea automaticamente un constructor implicit
« Respuesta #1 en: 13 Abril 2017, 20:22 pm »

Cuando no defines ningún constructor para una clase, existe un constructor por defecto que no hace nada (salvo llamar a los constructores de los campos que tenga que sean clases).

Eso es lo que dice el estándar.
Luego, cada compilador hará lo que vea, aunque generalmente se ceñirán al estándar.
Con esta última frase quiero decir, que si tú declaras un constructor, aunque sea el constructor por defecto con el cuerpo vacío, el compilador puede agregarlo al código si quiere.

En fin, el lenguaje C++ es un estándar y tiene un funcionamiento. Los "bytes" que ocupe el programa generado por el compilador, es algo a parte.


Si usas GCC para compilar, pasándole el argumento "-S", obtendrás el código ensamblador resultante. Ahí puedes ver con más detalle qué genera.

Y sobre temas del estándar de C++, puedes utilizar: http://en.cppreference.com/w/cpp/language/default_constructor


En línea

GisiNA

Desconectado Desconectado

Mensajes: 30


Ver Perfil
Re: C++ OOP constructor implicito - ¿se crea automaticamente un constructor implicit
« Respuesta #2 en: 13 Abril 2017, 21:24 pm »

Hola!

Primero que todo agradecer tu respuesta.

Muchas gracias por el -s flag.

Efectivamente resultan ambos ejecutables generados del mismo tamaño.

Tomaré entonces la proposición que dice que un constructor implícito es generado por el compilador como correcta.

Saludos!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
jugar al constructor en windows xp
Juegos y Consolas
tompa 1 1,509 Último mensaje 17 Marzo 2006, 22:36 pm
por pastor13
Duda en constructor copia
Programación C/C++
__fnx__ 5 3,828 Último mensaje 3 Agosto 2011, 03:16 am
por Karman
Problema con Constructor y Destructor
Programación C/C++
ZedGe 3 2,396 Último mensaje 16 Enero 2012, 10:06 am
por BlackZeroX
Duda array en constructor
Java
KaRaLLo 4 16,327 Último mensaje 23 Enero 2012, 01:59 am
por leogtz
Pasar Datos Constructor
Java
cristiantorres 9 9,309 Último mensaje 1 Agosto 2012, 05:24 am
por ChavalChavito
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines