본문 바로가기

Language/C++

순수 가상 함수와 추상 클래스

순수 가상 함수  와 추상클래스

순수 가상 함수란?
함수 오버라이딩을 한후 Base class 의 은닉된 함수를 완전히 가리기 위하여 virtual 키워드로
함수부를 완전히 가리게 된다. 하지만 함수의 바디(body) 부분을 여전히 기제를 해야하는데
이는 실로 엄청나게 번거로운 방법이고 코드도 늘어가게 된다. 실행도 되지 않는 함수때문에
함수의 몸체 부분을 (return 문장만 쓰더라도 블럭을 잡아야 하니까 ) 모두 기제해줘야 하기 때문이다.
그래서 virtual void a() = 0; 와 같은 형식으로 해더 부분을 변경하여 코드를 작성하면 컴파일은 이 함수가
가상 함수라는걸 알고 제어를 오버라이딩 된곳으로 바로 옴기게 된다. 이때 이 함수를 순수 가상 함수라고 한다.
왜냐하면 함수의 몸체가 없기때문에 이것은 함수가 아니기 때문이다. 그렇나 함수라고 불리기 때문에 완전한 가상
함수이다.
#include <iostream.h>

class AAA
{
public:
    virtual void a() = 0;//순수 가상함수
};

class BBB:public AAA
{
public:
    void a()
    {
        cout<<"BBB"<<endl;
    }
};
 
int main(void)
{
    AAA* a = new BBB;
    a->a();
    return 0;

}

추상 클래스
순수 가상함수가 적어도 한개 이상이 포함된 클래스를 추상 클래스라고 한다. 
이 클래스는 완벽한 클래스가 아닌 불완전한 클래스를 추상 클래스 라고한다.
그렇기 때문에 추상 클래스는 포인터 선언은 가능하지만 객체화될 수가 없다.
왜....완벽한넘이 아니니까.......