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.