Prediga la salida de los siguientes programas C++.
Pregunta 1
#include <iostream> #include <string.h> using namespace std; int main() { cout << sizeof("GeeksforGeeks") << endl; cout << strlen("GeeksforGeeks"); return 0; }
Producción:
14 13
El operador Sizeof devuelve el tamaño de la string, incluido el carácter nulo, por lo que la salida es 14. Mientras que la función strlen() devuelve la longitud exacta de la string, excluyendo el carácter nulo, por lo que la salida es 13.
Pregunta 2:
#include <iostream> using std::cout; class Test { public: Test(); ~Test(); }; Test::Test() { cout << "Constructor is executed\n"; } Test::~Test() { cout << "Destructor is executed\n"; } int main() { delete new Test(); return 0; }
Producción:
Constructor is executed Destructor is executed
La primera declaración dentro de la función principal() parece extraña, pero es perfectamente válida. Es posible crear un objeto sin dar su identificador a ningún puntero en C++. Esta declaración creará un objeto de clase Prueba sin ningún puntero que lo apunte. Esto también se puede hacer en lenguajes como Java y C#.
Por ejemplo, considere la siguiente declaración:
new student(); // valid both in Java & C#
La declaración anterior creará un objeto de clase de estudiante sin ninguna referencia que lo apunte.
Pregunta 3:
#include <iostream> using std::cout; class main { public: main() {cout << "ctor is called\n";} ~main() {cout << "dtor is called\n";} }; int main() { main m; // LINE 11 }
Producción:
Compiler error: 11 8 [Error] expected ';' before 'm'
El programa anterior parece sintácticamente correcto pero falla en la compilación. El nombre de la clase de motivo. El nombre de la clase es principal, por lo que es necesario decirle al compilador que principal es el nombre de la clase. En general, no se requiere escribir la palabra clave struct o class para crear un objeto de la clase o struct. Pero cuando el nombre de la clase es principal, se vuelve necesario escribir struct o class al crear el objeto de class o struct. Recuerde que main no es una palabra reservada.
La siguiente es una versión correcta del programa anterior:
#include <iostream> using std::cout; class main { public: main() { cout << "ctor is called\n";} ~main() { cout << "dtor is called\n";} }; int main() { class main m; }
Ahora prediga la salida del siguiente programa:
#include <iostream> using std::cout; class main { public: main() { cout << "ctor is called\n"; } ~main() { cout << "dtor is called\n"; } }; main m; // Global object int main() { }
El programa anterior se compila y funciona bien porque el objeto es global. El constructor del objeto global se ejecuta antes de la función main() y su destructor se ejecuta cuando finaliza main().
Conclusión: cuando el nombre de la clase/estructura es principal y cada vez que se crea el objeto local, es obligatorio escribir clase o estructura cuando se crea el objeto de clase / y estructura. Porque la ejecución del programa C++ comienza desde la función principal(). Pero esta regla no se aplica a los objetos globales. Una vez más, main no es una palabra clave, pero trátela como si lo fuera.
Este artículo es una contribución Conoce a Pravasi . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA