본문 바로가기
!?/C++

오버라이딩

by Where's my namespace 2012. 8. 30.

C++에는 오버로딩과 오버라이딩이 있다.  오버로딩의 경우 앞서 말했지만, 같은 이름을 가진 함수를 사용하는 것이다.

 

그렇다면, 오버라이딩은 무엇일까. 오버라이딩이란, 부모클래스의 멤버함수를 자식클래스에서 재정의 하는 것이다.

 

오버라이딩을 알기위해서는 먼저, 순수 가상 함수에 대해 알아보자.

 

순수가상함수는, 일반적인 가상함수와 다르게 이 함수는 정의가 없다. 쉽게 말해 이 함수를 사용 할 수 없다.

 

순수가상함수를 쓰는 경우는, 자식클래스에서는 사용하지만, 부모클래스에서는 절대 쓸 일 없는 그런 함수일 때,

 

사용한다. 가상함수지만, 부모클래스에서는 호출이 안되는 함수.

 

어떻게 정의 하는지 살펴보자. 일반적으로 가상함수의 선언에 " = 0 " 을 붙여주면 된다. 예를 보자.

 

virtual void draw() const = 0 ;

 

과 같이 선언하고, 함수의 정의는 필요없다. 이렇게 되면 순수가상함수가 되는 것이다.

 

클래스 내부에 순수가상함수가 1개라도 있으면 그 클래스는 객체를 생성 할 수 없다. 단순히 부모클래스의 역할만

 

할 수 있게 되는 것이다. 이런 클래스를 추상 클래스 라고한다.  추상클래스를 사용 할때는 이 클래스가 부모클래스

 

역할 말고는 하는 것이 없을 때 사용하면 좋다. 추상클래스의 반대는 콘크리트 클래스다.

 

 

이제 오버라이딩에 대해 알아보자, 사실 오버라이딩이라고 해봤자 별게 있는 것이 아니다. 앞선 예제에서 처럼

 

도형이 있고, 원, 사각형이 있을 때,  각각 클래스마다 출력하는 함수를 가지고 있다.  그래서 각각 클래스 마다

 

부모클래스의 출력하는 함수를 가져가서 좀 고쳐서 사용한다.  이 경우가 오버라이딩 한 경우이다.

 

 

 

'!? > C++' 카테고리의 다른 글

접근 범위, 존속 기간  (0) 2012.09.14
Exception Handling  (0) 2012.09.10
클래스 가상함수  (1) 2012.08.30
클래스 상속과 포함.  (0) 2012.08.28
클래스 2  (0) 2012.08.19