fullstack

'순수 가상 함수'에 해당되는 글 1건

  1. [C++] 순수 가상 함수와 추상 클래스

[C++] 순수 가상 함수와 추상 클래스

Language/C++

이전 글인 [C++] virtual 키워드 를 보면 virtual 키워드를 통해서 가상 함수를 정의하였다.

보통 가상 함수를 쓸 때, Base 클래스에서는 함수를 정의만 하고 실제 구현은 오버라이딩 하고 있는 Derived 클래스에서 하게된다.

이러한 경우 다음과 같이 함수를 선언만 하고 정의를 하지 않아도 된다.


1
virtual void func() = 0;



이처럼 선언한 함수를 순수 가상 함수라 부른다.

이처럼 Base 클래스에서 순수 가상 함수를 정의하면 Derived 클래스에서는 반드시 오버라이딩 하여 함수를 정의 해야 한다.

순수 가상 함수는 진짜로는 존재하지 않는 가상의 함수를 말하며, 하나 이상의 순수 가상 함수를 가지고 있는 클래스를 추상(abstract) 클래스라 부른다.

추상 클래스는 함수 정의가 생략된 순수 가상 함수를 가지고 있기 때문에 완전한 클래스가 아니다. 

따라서 추상 클래스는 객체화 할 수 없다. (객체 지향적 설계에 따른다면 객체화 할 필요도 없다)


순수 가상함수와 추상 클래스가 필요한 이유는 다음 예제를 보면 이해할 수 있다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Object
{
public:
    virtual void draw() = 0;
};
 
class Circle : public Object
{
public:
    void draw() { cout << "draw circle" << endl; }
};
 
class Rect : public Object
{
public:
    void draw() { cout << "draw rect" << endl; }
};



Object 클래스는 draw라는 순수 가상 함수를 가진 추상 클래스로, 이를 상속하는 클래스는 모두 draw라는 함수를 오버라이딩하여 정의 해야 한다.

이처럼 순수 가상 함수를 이용해 모든 Derived 클래스에서 구현해야될 함수를 정의할 수 있다.


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

[C++] 다중 상속  (1) 2015.12.28
[C++] virtual 소멸자  (0) 2015.12.26
[C++] static binding & dynamic binding  (0) 2015.12.26
[C++] virtual 키워드  (0) 2015.12.24
[C++] 오버라이딩 (Overriding)  (0) 2015.12.24