이 인쇄물이 출력되는 이유는 23
입니다. 내 기대는 33
이었다. 누군가는 이것에 대해 약간의 빛을 비춰 줄 수 있었습니까?선택적 인수가있는 가상 함수 무시
struct A {
virtual void f() {cout << "1";}
};
/* Private inheritance */
struct B : private A {
void f(int x = 0) {cout << "2";}
};
struct C : B {
void f(){cout << "3";}
};
int main() {
C obj;
B &ref = obj;
ref.f();
obj.f();
}
'B :: f (int = 0)'는'A :: f()'의 오버라이드 체인에 없기 때문에; 'A :: f()'또는'C :: f()'와 독립적입니다. 서명은 다릅니다. 컴파일러가 왜 C :: f() 대신 (: A :: f()를 통해)'B :: f (int = 0)'을 선택했는지에 대한 질문이 더 많습니다. ? – WhozCraig
관련 : http://stackoverflow.com/questions/3533589/can-virtual-functions-have-default-parameters – jogojapan