Как получить доступ к переопределенным членам базовых классов базовых классов?
#include <iostream>
using namespace std;
class A {public: char x; A(){x='A';};};
class B1 : public A {public: char x; B1(){x='B';};};
class B2 : public A {public: char x; B2(){x='B';};};
class C : public B1, public B2 {public: char x; C(){x='C';};};
int main(){
C c;
cout << c.x << endl; // prints C
cout << c.B1::x << endl; // prints B
cout << ((B1&) c).x << endl; // prints B
// cout << c.A::x << endl; // normally prints A but doesn't work here
cout << ((A&) c).x << endl; // prints A
return 0;
}
Является ли ссылка (или указатель) единственной возможностью?Я попытался A :: B :: x, чтобы связать операторы области видимости, но это не работает.Предположим, я хочу сохранить «двойной A», то есть не делать наследование виртуальным.
((B&) c).x
кажется хорошим «обходным путем» для c.B::x
, но они не равны в случае виртуальных функцийони?