다음은 가상 메서드를 재정의 할 때 표시되는 코드입니다. 출력 : B B A A B 이 맞습니까? bar 메서드를 재정의 할 수 없다고 생각했는데 ...?비 가상 메서드 재정의?
#include <iostream>
using namespace std;
class A
{
public:
virtual void foo(){cout<<"A"<<endl;}
void bar(){cout<<"A"<<endl;}
};
class B : public A
{
public:
void foo(){cout<<"B"<<endl;}
void bar(){cout<<"B"<<endl;}
};
int main()
{
B b;
A * pA = new A;
A * pA2 = &b;
b.foo(); b.bar();
pA->foo(); pA->bar();
pA2->foo(); pA2->bar();
}
은'bar' 방법은 가상 있다면, 그것은'B B A A B B'를 인쇄 할이 ... 연평균 삭제하는 것을 잊지 마세요. 너의 요점이 뭐야? – rici
@Rachel : 맞습니다. 'bar'를 재정의 할 수 없습니다. 그리고 그렇지 않습니다. 'bar'가 오버라이드 된 경우 출력은'B B A A B B'가됩니다. 당신은'B B A A B A'를 얻었습니다. 그것은 막대가 오버라이드되지 않기 때문에 매우 구체적입니다. 그래서, 당신의 질문은 무엇입니까? – AnT