IT이야기

정적 가상 기능을 가질 수 있습니까?

cyworld 2021. 9. 17. 21:33
반응형

정적 가상 기능을 가질 수 있습니까? 그렇지 않다면 왜?


가능한 중복:
C++ 정적 가상 멤버?

정적 가상 기능을 가질 수 있습니까? 그렇지 않다면 왜?

class X
{
public:
       virtual static void fun(){} // Why we cant have static virtual function in C++?
};

아니요, C++에서는 의미가 없기 때문입니다.

가상 함수는 클래스 인스턴스대한 포인터/참조가 있을 때 호출됩니다 . 정적 함수는 특정 인스턴스에 연결되지 않고 클래스에 연결됩니다. C++에는 클래스에 대한 포인터가 없으므로 정적 함수를 가상으로 호출할 수 있는 시나리오가 없습니다.


의미가 없습니다. 가상 멤버 함수 의 요점 은 호출된 개체 인스턴스 의 동적 유형에 따라 전달된다는 것 입니다. 반면에 정적 함수는 인스턴스와 관련이 없으며 오히려 클래스 의 속성입니다 . 따라서 그것들이 가상이라는 것은 의미가 없습니다. 필요한 경우 비정적 디스패처를 사용할 수 있습니다.

struct Base
{
    static void foo(Base & b) { /*...*/ }

    virtual ~Base() { }
    virtual void call_static() { foo(*this); /* or whatever */ }
};

struct Derived : Base
{
     static void bar(int a, bool b) { /* ... */ }

     virtual void call_static() { bar(12, false); }
};

용법:

Base & b = get_instance();
b.call_static();   // dispatched dynamically

// Normal use of statics:
Base::foo(b);
Derived::bar(-8, true);

ReferenceURL : https://stackoverflow.com/questions/9863007/can-we-have-a-static-virtual-functions-if-not-then-why

반응형