1
"YXX"를 반환하는 다음 코드가 있습니다. 두 번째 인쇄물에 'X'가 표시되는 이유를 알고 싶습니다. 반면에 virtual
키 워드가 클래스 X에 사용되었습니다. 따라서 tab[0] = y1
줄은 Y 객체로 tab [0]으로 설정되고 'Y'로 표시됩니다. 가상 메서드가 아닌가요?가상 메서드를 사용하는 특별한 경우
#include <iostream>
class X {
public: virtual void f() const { std::cout << "X"; }
};
class Y : public X {
void f() const { std::cout << "Y"; }
};
void print(const X &x) { x.f(); }
int main() {
X tab[2];
Y y1;
tab[0] = y1;
print(y1);
print(tab[0]);
print(tab[1]);
std::cout << std::endl;
}
를 인쇄 할 것이다. –
포인터를 사용할 필요가 –
다형성의 경우 기본 클래스에 대한 포인터 또는 참조가 필요하며 하위 클래스를 가리 키도록 초기화됩니다. 함수를 재정의 할 때 ['override'] (http://en.cppreference.com/w/cpp/language/override)를 사용하는 것이 좋습니다. –