다음을 통해 공유


정적 멤버 함수

정적 멤버 함수는 클래스 범위를 갖는 것으로 간주됩니다. 비정적 멤버 함수와는 달리, 이러한 함수는 암시적 this 인수가 없으므로 정적 데이터 멤버, 열거자 또는 중첩 형식만 직접 사용할 수 있습니다. 정적 멤버 함수는 해당 클래스 형식의 개체를 사용하지 않고 액세스될 수 있습니다. 다음 예제를 고려해 보십시오.

예제

// static_member_functions.cpp
#include <stdio.h>

class StaticTest
{
private:
    static int x;
public:
    static int count()
    {
        return x;
    }
};

int StaticTest::x = 9;

int main()
{
    printf_s("%d\n", StaticTest::count());  // 9
}

설명

위의 코드에서 StaticTest 클래스에는 정적 멤버 함수인 count가 포함되어 있습니다. 이 함수는 전용 클래스 멤버의 값을 반환하지만, StaticTest 형식의 지정된 개체와 연결될 필요는 없습니다.

정적 멤버 함수에는 외부 링크가 있습니다. 이러한 함수에는 this 포인터가 없습니다. 따라서 이러한 함수에는 다음과 같은 제한 사항이 적용됩니다.

  • 멤버 선택 연산자(. 또는 –>)를 사용하여 비정적 클래스 멤버 데이터에 액세스할 수 없습니다.

  • virtual로 선언될 수 없습니다.

  • 인수 형식이 동일한 비정적 함수와 이름이 같을 수 없습니다.

    참고

    정적 멤버 함수를 선택하는 멤버 선택 연산자(. 또는 –>)의 좌변은 계산되지 않습니다.이는 함수가 의도하지 않은 결과에 사용되는 경우 중요할 수 있습니다.예를 들어 SideEffects().CountOf() 식은 SideEffects 함수를 호출하지 않습니다.

참고 항목

참조

this 포인터