Prediga la salida de los siguientes programas C++.
Pregunta 1
#include <iostream> using namespace std; class A { public: void print() { cout << "A::print()"; } }; class B : private A { public: void print() { cout << "B::print()"; } }; class C : public B { public: void print() { A::print(); } }; int main() { C b; b.print(); }
Salida: Error del compilador: ‘A’ no es una base accesible de ‘C’
Hay una herencia multinivel en el código anterior. Tenga en cuenta el especificador de acceso en «clase B: privado A». Dado que se usa el especificador de acceso privado, todos los miembros de ‘A’ se vuelven privados en ‘B’. La clase ‘C’ es una clase heredada de ‘B’. Una clase heredada no puede acceder a los miembros de datos privados de la clase principal, pero print() de ‘C’ intenta acceder al miembro privado, por eso obtenemos el error.
Pregunta 2
#include<iostream> using namespace std; class base { public: virtual void show() { cout<<" In Base \n"; } }; class derived: public base { int x; public: void show() { cout<<"In derived \n"; } derived() { x = 10; } int getX() const { return x;} }; int main() { derived d; base *bp = &d; bp->show(); cout << bp->getX(); return 0; }
Salida: Error del compilador: ‘base de clase’ no tiene ningún miembro llamado ‘getX’
En el programa anterior, hay un puntero ‘bp’ de tipo ‘base’ que apunta a un objeto de tipo derivado. La llamada de show() a través de ‘bp’ está bien porque ‘show()’ está presente en la clase base. De hecho, llama a la clase derivada ‘show()’ porque ‘show()’ es virtual en la clase base. Pero la llamada a ‘getX()’ no es válida porque getX() no está presente en la clase base. Cuando un puntero de clase base apunta a un objeto de clase derivada, solo puede acceder a aquellos métodos de clase derivada que están presentes en la clase base y son virtuales.
Pregunta 3
#include<iostream> using namespace std; class Test { int value; public: Test(int v = 0) { value = v; } int getValue() { return value; } }; int main() { const Test t; cout << t.getValue(); return 0; }
Salida: Error del compilador
En el programa anterior, el objeto ‘t’ se declara como un objeto const. Un objeto const solo puede llamar a funciones const. Para corregir el error, debemos hacer que getValue() sea una función const.
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