2014-01-21 3 views
0

아래 코드는 "Der : 12"이지만 결과는 "Der : 11"이며, 결과는 왜 출력되고, 어디에서 결과가 나오는지 알 수 있습니다. 기본 인수 저장소?C++ 가상 함수의 기본 인수 값

#include <stdio.h> 
class Base{ 
public: 
    virtual void show(int i = 11) 
    { 
     printf("Base:%d\n", i); 
    } 
}; 

class Der : public Base{ 
public: 
    virtual void show(int i = 12) 
    { 
     printf("Der:%d\n", i); 
    } 
}; 

int main() 
{ 
    Base *p = new Der(); 
    p->show(); 

    return 0; 
} 
+0

또한 여기 ... [가상 함수에 기본 매개 변수가 있습니까?] (http://stackoverflow.com/questions/3533589/can-virtual-functions-have-default-parameters) – godel9

답변

0

흠, 사실 다른 기본 매개 변수로 가상 함수를 재정의하는 것이 타당하지 않을 수 있습니다. 그러나 컴파일러는 여러분의 기대에 위배되는 경우에도 옳은 일을합니다. 여기에 어떻게됩니까

Base *p; 
p->show(); 

컴파일러가 인수를 복용하지 않는 기능에 Base에 보이는 것입니다. 가 아니다, 그러나 그것은 하나의 인수 기능을 발견하고 11

의 기본 매개 변수를 show(int) 호출하지만 기능은 가상이며, p의 동적 유형 Der 때문에 그래서, 실제로 얻을 수 Der::show(int)입니다 - 그러나 결정적으로 여전히 Base의 기본 인수 11을 사용하지만 기본 인수는 런타임 디스패치를 ​​사용하지 않고 정적으로 조회됩니다.

나는 그것을 시도하지 않은,하지만 당신은 대신 12 출력을 얻을 것

Der *p = new Der(); 
p->show(); 

말했다 만약 내가 상상하는 것입니다.