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 {}
그렇기에 정적 함수의 가상화는 가능성을 지울 수 있다.
'C++' 카테고리의 다른 글
C++에서 가상 함수(Virtual function)은 private이 가능할까? (0) | 2024.04.19 |
---|---|
C++ RTTI(Run-Time Type Information) 총정리 (0) | 2024.04.19 |
C++ 순수 가상 함수와 추상 클래스 총정리 (0) | 2024.04.15 |
C++ 순수 가상 소멸자(Pure Virtual Destructor) 총정리 (1) | 2024.04.12 |
C++ 가상 복사 생성자(Virtual Copy Constructor) 총정리 (0) | 2024.04.09 |