기본 클래스의 기본 클래스에서 재정의 된 멤버에 어떻게 액세스합니까?재정의 된 요소의 여러 수준에 액세스하는 방법은 무엇입니까?
#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를 시도했지만 작동하지 않습니다. "double A"를 유지하려고합니다. 즉, 상속 가상을 만들지 않습니다.
((B&) c).x
은 c.B::x
에 좋은 "임시 해결책"인 것처럼 보이지만 가상 함수의 경우에는 같지 않습니까?
좋은 조합 참조 캐스트 및 범위 op 모든 문제를 해결하는 것으로 보인다. 아무도 다른 문제가 생기지 않는다면 받아 들일 것입니다 ... –