Prediga la salida de los siguientes programas C++.
Pregunta 1
C
#include<iostream> #include<string.h> using namespace std; class String { char *p; int len; public: String(const char *a); }; String::String(const char *a) { int length = strlen(a); p = new char[length +1]; strcpy(p, a); cout << "Constructor Called " << endl; } int main() { String s1("Geeks"); const char *name = "forGeeks"; s1 = name; return 0; }
Producción:
Constructor called Constructor called
La primera línea de salida se imprime con la declaración «String s1 («Geeks»);» y la segunda línea se imprime con la instrucción “s1 = nombre;”. El motivo de la segunda llamada es que un constructor de un solo parámetro también funciona como un operador de conversión (consulte this y this para obtener más detalles).
Pregunta 2
CPP
#include<iostream> using namespace std; class A { public: virtual void fun() {cout << "A" << endl ;} }; class B: public A { public: virtual void fun() {cout << "B" << endl;} }; class C: public B { public: virtual void fun() {cout << "C" << endl;} }; int main() { A *a = new C; A *b = new B; a->fun(); b->fun(); return 0; }
Producción:
C B
Un puntero de clase base puede apuntar a objetos de clases secundarias. Un puntero de clase base también puede apuntar a objetos de clases secundarias. Por lo tanto, la línea “A *a = nueva C;” es válida. La línea “a->fun();” imprime «C» porque el objeto apuntado es de clase C y fun() se declara virtual tanto en A como en B (ver esto para más detalles). La segunda línea de salida se imprime con la instrucción «b->fun();».
Escriba comentarios si encuentra que alguna de las respuestas/explicaciones es incorrecta, o si desea compartir más información sobre los temas discutidos 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