simple programacion polimorfismo persona orientada objetos multiple metodos herencia ejemplos clase c++ multiple-inheritance

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.