#include<iostream> using namespace std; class Base { protected: int a; public: Base() {a = 0;} }; class Derived1: public Base { public: int c; }; class Derived2: public Base { public: int c; }; class DerivedDerived: public Derived1, public Derived2 { public: void show() { cout << a; } }; int main(void) { DerivedDerived d; d.show(); return 0; }
(A) Error del compilador en la línea «cout << a;»
(B) 0
(C) Error del compilador en la línea «class DerivedDerived: public Derived1, public Derived2»
Respuesta: (A)
Explicación: Este es un ejemplo típico de problema de diamantes de herencia múltiple . Aquí, el miembro de la clase base ‘a’ se hereda a través de Derived1 y Derived2 . Por lo tanto, hay dos copias de ‘a’ en DerivedDerived que hacen la declaración «cout << a;» ambiguo.
La solución en C++ es usar clases base virtuales. Por ejemplo, el siguiente programa funciona bien e imprime
#include<iostream>
usando el espacio de nombres estándar;
clase Base
{
protegida:
int a;
público:
Base() {a = 0;}
};
clase Derivada1: base pública virtual
{
pública:
int c;
};
clase Derivada2: base pública virtual
{
pública:
int c;
};
clase DerivadaDerivada: pública Derivada1, pública Derivada2
{
pública:
void show() { cout << a; }
};
int main(void)
{
DerivadoDerivado d;
d.mostrar();
devolver 0;
}
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