#1. 개념
1. static 함수의 오버로딩
class Super
{
public:
static void StaticMethod()
{cout << "Super::StaticMethod !" << endl;}
};
class Sub : public Super
{
public:
static void StaticMethod()
{cout << "Sub::StaticMethod !" << endl;}
};
Super::StaticMethod(); // Super의 StaticMethod가 호출
Sub::StaticMethod(); // Sub의 StaticMethod가 호출
Sub mySub;
Super& ref = mySub;
mySub.StaticMethod(); // Sub::StaticMethod가 호출됩니다.
ref.StaticMethod(); // Super::StaticMethod가 호출됩니다.
먼저, static 멤버 함수의 오버라이딩은 불가능하지만(static 가상 함수부터가 불가능), static 멤버 함수의 오버로딩은 가능합니다.
이때, static 멤버 함수는 정의된 클래스에 종속되어, 같은 이름의 멤버 함수 호출 시 참조된 클래스에 맞추어 실행됩니다. 따라서, 해당 함수는 호출 시 객체가 무엇이든 관계없이 접근하는 타입에 맞추어 직관적으로 어떤 static 멤버 함수를 호출할지 결정합니다.