#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 멤버 함수를 호출할지 결정합니다.
'언어 > Basic C++' 카테고리의 다른 글
[Basic C++] #15 오버라이딩의 특수한 경우 세 번째 (0) | 2022.03.26 |
---|---|
[Basic C++] #14 오버라이딩의 특수한 경우 두 번째 (0) | 2022.03.25 |
[Basic C++] #12 순수 가상 함수, 추상 클래스 (0) | 2022.03.25 |
[Basic C++] #11 생성자의 상속 (0) | 2022.03.18 |
[Basic C++] #10 오버라이드 키워드, override (0) | 2022.03.17 |