Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Archives
Today
Total
관리 메뉴

로또

가상 함수 본문

언어

가상 함수

아롱로또 2023. 9. 4. 21:26

정의

자식 Class에서 다시 정의할 멤버 함수.

가상 함수를 사용하면 함수 호출을 만드는 데 사용한 식과 관계없이 개체에 적합한 함수가 호출된다.

 

virtual keyword를 사용하지 않을 경우

class Parent{
public:
    void print() {
        cout << "In Parent: void Print()" << endl;
    }
};

class Child : public Parent{
public:
    void print() {
        cout << "In Child: void Print()" << endl;
    }
};

int main(){
   Parent* p1;
   Parent* p2;
   Parent p;
   Child c;

   p1 = &p;
   p2 = &c;

   p1->print();
   p2->print();
}

 

Virtual을 사용하지 않은 실행 결과

virtual keyword를 사용할 경우

class Parent{
public:
    virtual void print() {
        cout << "In Parent: void Print()" << endl;
    }
};

class Child : public Parent{
public:
    void print() {
        cout << "In Child: void Print()" << endl;
    }
};

int main(){
   Parent* p1;
   Parent* p2;
   Parent p;
   Child c;

   p1 = &p;
   p2 = &c;

   p1->print();
   p2->print();
}

Virtual을 사용한 실행 결과

Virtual 이란

virtual keyword를 추가하면 해당 함수를 가상 함수로 만든다.

C++ 컴파일러는 Class에 가상 함수가 존재하면 가상 함수 테이블을 생성한다.

 

가상 함수 테이블

가상 함수 테이블에는 가상 함수들의 주소가 저장되어있다.

가상 함수가 호출될 때 가상 함수 테이블을 거쳐서 호출되는 함수가 결정된다. (Dynamic Binding)

 

각 객체는 가상 함수 테이블 포인터를 가져 해당 객체의 클래스에서 정의된 가상 함수 테이블에 접근할 수 있다.

이를 통해, 객체가 함수를 호출 했을 때, 실제로 어떤 함수가 실행되는지 결정된다.

 

Pure virtual

부모 Class에서 가상 함수에 대한 구현이 없는 경우를 순수 가상 함수라고 한다.

순수 가상 함수를 가지는 Class는 Abstract Class로 간주된다.

 

Abstract Class

하나 이상의 순수 가상 함수를 가지는 Class이다.

객체를 생성할 수 없다.

하위 Class들에게 함수를 구현하도록 강제할 수 있다.

 

 

참고자료

https://learn.microsoft.com/ko-kr/cpp/cpp/virtual-functions?view=msvc-170 

 

가상 함수

자세한 정보: 가상 함수

learn.microsoft.com

https://junstar92.tistory.com/177

 

[C++] 가상 함수 (virtual, override 키워드)

References Effective C++ (항목 9) 씹어먹는 C++ (https://modoocode.com/210) Contents 가상 함수 (virtual 키워드) 오버라이드(override 키워드) 다형성 (polymorphism) 생성자/소멸자에서의 가상 함수 호출(주의사항) 2021.07

junstar92.tistory.com

https://learn.microsoft.com/ko-kr/cpp/cpp/abstract-classes-cpp?view=msvc-170 

 

추상 클래스(C++)

자세한 정보: 추상 클래스(C++)

learn.microsoft.com

https://cosyp.tistory.com/228

 

가상함수(Virtual function)와 가상함수테이블(vtable)의 이해

오버라이딩(Overriding) 가상함수를 이해하기 위해선 오버라이딩(Overriding) 에 대해서 알아야 한다. SourceCode(1) class Parent{ void show(){ printf("this is parent\n"); } } class Child : public Parent{ void show(){ printf("this i

cosyp.tistory.com

 

'언어' 카테고리의 다른 글

Cast  (0) 2023.11.08
STL  (1) 2023.10.29
Template  (0) 2023.10.29
스마트 포인터  (0) 2023.09.20
람다 함수  (0) 2023.08.30