2012-09-03 24 views
8
class A{ 
    protected: 
    int var; 
}; 

class B{ 
    protected: 
    int var; 
}; 

class C : public A, public B {}; 

¿Qué ocurre aquí? ¿La variable se fusiona? ¿Puedo llamar uno en específico como, B :: var = 2, etc.C++ Varios padres con el mismo nombre de variable

+2

¿Intentó la sintaxis que sugirió ('B :: var')? ¡Pasa a ser correcto! –

Respuesta

10

Su clase C tendrá dos variables, B::var y A::var. Fuera de C se puede acceder a ellos de esta manera (si cambia a public:),

C c; 
c.A::var = 2; 

Intentar acceder c.var dará lugar a un error, ya que no hay campo con el nombre var, solamente A::var y B::var.

Dentro de C se comportan como campos regulares, de nuevo, con los nombres A::var y B::var.

1

Puede acceder a ellos en la clase C por A::var y B::var respectivamente.

Here es un enlace que cubre el mismo problema.

2

Si sólo se refieren a var interior de C, el compilador no sabe si quiere decir A::var o B::var y el compilador le dirá que var es ambigua. Por lo tanto, debe calificar completamente el nombre cuando usa var.

No ocurre ninguna fusión, cualquier instancia de C contendrá ambas variables.

Cuestiones relacionadas