언어/Basic C++

[Basic C++] #13_오버로딩, static 함수의 오버로딩

Hardii2 2022. 3. 25. 15:32

#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 멤버 함수를 호출할지 결정합니다.