"함수명"이 똑같은데 인자타입의 "차이"가 생겨서
"컴파일러"가 "구분"할 여지를 주는 것.
동시에 같은 이름의 함수가 여러개 존재 가능.
"상속" 관계에서만 사용이 가능하다.
부모에서 virtual로 함수 자식이들이 알아서 구현해라~ 던져주면
자식클래스에서 이것을 정의를 해서 자신의 입맛에 맞게 정의해서 사용.
class Parent
{
private:
int m_value_1;
public:
Parent()
:
m_value_1(10)
{
cout << "123" << endl;
}
public:
void Test()
{
cout << "Test P" << endl;
}
};
class Child : public Parent
{
private:
float m_value_2;
public:
Child()
:
m_value_2(20.2f)
{
cout << "456" << endl;
}
public:
void Test()
{
cout << "Test P" << endl;
}
};
Child c1;
c1.Test();
이렇게하게 되면
자식쪽의 Test함수를 호출을 한다.
즉, 같은 이름의 함수가 부모에게 있지만
자식에서 이것을 구현을 하면 "덮어 썻다"고 판단을 함 => 이게 "오버라이딩"이다.
그런데 굳이
이렇게 사용을하면 오버라이딩한 함수 말고 부모의 OutPut함수 호출이 가능하기는 하다.