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


 


Tema destacado: ¿Usas Skype? Protégete de los Skype Resolver


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  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 243 veces)
GisiNA

Desconectado Desconectado

Mensajes: 30


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

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


Conectado Conectado

Mensajes: 3.123


ASMático


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

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 »

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
problema con un constructor en php
Desarrollo Web
ChIIph 2 671 Último mensaje 16 Diciembre 2005, 00:36
por ChIIph
jugar al constructor en windows xp
Juegos y Consolas
tompa 1 415 Último mensaje 17 Marzo 2006, 22:36
por pastor13
problemas constructor y templates « 1 2 »
Programación C/C++
l337* 10 1,440 Último mensaje 30 Noviembre 2007, 20:38
por De@th (L1zb3th)
constructor en mi clase
Programación C/C++
bash 2 780 Último mensaje 1 Abril 2009, 16:58
por Anibal784
Pasar Datos Constructor
Java
cristiantorres 9 4,844 Último mensaje 1 Agosto 2012, 05:24
por ChavalChavito
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines