본문 바로가기
개발/C++

가상 함수

by 사과잼빵 2015. 10. 6.

C++은 다형성을 지원하기 위해서 virtual 키워드를 제공한다.

부모 클래스에서 virtual 키워드가 붙여진 함수는 자식 클래스에서 재정의 될 수 있다.

이 재정의하는 것을 오버라이딩이라고 한다.


설명을 위해 하나의 클래스와 이를 상속받는 자식클래스를 정의하겠다.

class Parent

{

virtual void Print(){printf("%s", "Parent Print");}

}

class Child : public Parent

{

void Print(){printf("%s", "Child Print");}  //상속받는 클래스에서의 virtual  키워드는

생략가능

}


Parent* p = new Child;

p->Print();    //-> 포인터가 실제 가리키는 클래스인 Child 클래스의 Print가 호출된다.


컴파일러는 p가 실제 가리키는 객체가 Parent 타입인지 Child 타입인지 알지 못한다. 그렇기 때문에 런타임 시점에 실제 가리키는 객체의 함수를 호출하게 되는데 이는 가상함수테이블(vftbl)이 있기 때문에 가능하다.

클래스 내에 virtual 함수가 존재하고, 이 클래스를 상속받는 클래스에서 오버라이드하게 되면 해당 클래스 내에 이 함수에 대한 가상함수테이블이 생성된다.









'개발 > C++' 카테고리의 다른 글

복사 생성자와 복사 대입연산자  (0) 2016.10.22
explicit 키워드  (0) 2016.10.20
c++11에 추가된 기능 - auto 변수  (0) 2015.09.30
클래스 전방선언  (0) 2015.09.30