여러 상속을 사용하면 개인 회원이 액세스 할 수 있습니다
-
21-12-2019 - |
문제
class A {
public:
int a;
};
class B: private A {
};
class C: public A {
};
class D: public B, public C {
D() {
B::a = 0;
}
};
.
B는 비공식적으로 A를 삭제하지만 C의 D 's의 상속을 제거하면 컴파일러는 내가 기대하는 것처럼 컴파일러가 액세스 할 수 없다고합니다.그래서 C 혼란스러운 내 컴파일러의 상속은 무엇입니까?
컴파일러는 gcc 4.4.7
입니다.해결책
표준이
에 그러한 액세스를 허용하지 않기 때문에 정품 컴파일러 버그처럼 보입니다.11.2 기본 클래스 및 기본 클래스 멤버의 접근성
표준 자체 외부의 증거를 찾고있는 Whozcraig는 이미 그럴듯이 그러한 접근을 허용하지 않는다고 해당합니다.
GCC에서 혼동 될 수있는 유사한 패턴을 찾으려면 대부분의 액세스의 경로가 보호하는 보호가 적용되는 경로를 결정하므로 가상 기본 클래스 A가 가상 기본 클래스 A가 허용 될 수 있습니다.
제휴하지 않습니다 StackOverflow