[C++] 가상 함수

dd_ddong·2022년 7월 30일
0

c++

목록 보기
27/38

함수 오버라이딩 시 문제점

객체 포인터로 객체를 가리킬 경우 포인터형에 해당하는 클래스의 멤버에만 접근가능하다.

따라서

int main()
{
	Base* ptr1 = new Derived();
    ptr1->TestOverride();
}

위와 같이 실행시 Derived의 OverrideTest가 호출되는 것이 아닌 Base의 Override가 호출된다.

가상함수

virtual void OverrideTest() { ... }
위와 같이 virtual 키워드를 통해 함수를 선언하고 함수 오버라이딩을 한다면

int main()
{
	Base* ptr1 = new Derived();
    ptr1->TestOverride();
}

위의 경우에도 Derived의 OverrideTest가 호출된다.
virtual로 선언한 함수를 가상함수 라고 한다.

가상함수는 포인터 형에 관계없이 포인터가 가리키는 객체의 마지막 오버라이딩 함수를 호출한다.

따라서 기초클래스의 포인터로도 유도클래스의 멤버함수를 호출할 수 있게된다.

순수 가상 함수

가상함수에서 몸체의 정의로 빼버린 함수

virtual void OverrideTest() = 0;
{ } 대신 =0을 넣어준다.

순수 가상함수가 있는 클래스는 추상클래스라고 부른다.
추상클래스는 객체생성이 불가하다.

0개의 댓글