c++ - programacion - Herencia mĂșltiple: mismo nombre de variable
polimorfismo c++ (4)
Al acceder a la word en la clase de Derived , tenía que declarar
class Derived: public A, public B
{
Derived()
{
A::word = X;
//or
B::word = x;
}
};
class A
{
protected:
string word;
};
class B
{
protected:
string word;
};
class Derived: public A, public B
{
};
¿Cómo se vería afectada la accesibilidad de la word variable en Derived ? ¿Cómo lo resolvería?
Puede usar la palabra clave using para decirle al compilador qué versión usar:
class Derived : public A, public B
{
protected:
using A::word;
};
Esto le dice al compilador que la clase Derived tiene una word miembro protegida, que será un alias de A::word . Luego, cuando utilice la word identificación no calificada en la clase Derived , significará A::word . Si desea utilizar B::word , debe calificar completamente el alcance.
Será ambiguo, y obtendrás un error de compilación diciendo eso.
Tendrá que usar el alcance correcto para usarlo:
class Derived: public A, public B
{
Derived()
{
A::word = "A!";
B::word = "B!!";
}
};
Su clase Derived tendrá dos variables, B::word y A::word Fuera de Derived , puede acceder a ellas de esta manera (si cambia su acceso a público):
Derived c;
c.A::word = "hi";
c.B::word = "happy";
Intentar acceder a c.word dará lugar a un error , ya que no hay un campo con la word nombre, sino solo A :: word y B :: word.
Dentro de Derived se comportan como campos regulares, nuevamente, con los nombres A::var y B::var también mencionados en otras respuestas.