C++

C++ 정적 함수의 가상화 여부 총정리

김구티2 2024. 4. 15. 19:43

1. 정적 함수의 가상화 가능성

C++에서 클래스의 정적 멤버 함수는 가상일 수 없다. 가상 함수는 클래스의 인스턴스에 대한 포인터 또는 참조가 있을 때 호출된다. 정적 함수는 클래스의 인스턴스에 연결되지는 않지만, 클래스에 연결된다. C++에는 포인터 대 클래스가 없으므로 정적 함수를 가상으로 호출할 수 있는 시나리오는 없다.

예를 들어, 아래 프로그램은 컴파일 오류가 나타난다:

// CPP Program to demonstrate Virtual member functions
// cannot be static
#include <iostream>

using namespace std;

class Test {
public:
     virtual static void fun() {}
};

 

출력:

prog.cpp:9:29: error: member ‘fun’ cannot be declared both virtual and static
    virtual static void fun() {}

 

정적 멤버 함수는 구성할 수 없고, 휘발성이 있다. 다음 코드 또한 컴파일에 실패한다:

// CPP Program to demonstrate Static member function cannot
// be const
#include <iostream>

using namespace std;

class Test {
public:
     static void fun() const {}
};

 

출력:

prog.cpp:8:23: error: static member function ‘static void Test::fun()’ cannot have cv-qualifier
    static void fun() const {}

그렇기에 정적 함수의 가상화는 가능성을 지울 수 있다.

 

728x90