반응형
순수 가상 함수
C++ 가상 함수(virtual function)는 파생 클래스에서 재정의할 것으로 기대하는 멤버 함수를 의미한다.
- 이와는 달리 순수 가상 함수(pure virtual function)란 파생 클래스에서 반드시 재정의해야 하는 멤버 함수를 의미한다.
- 따라서 파생 클래스에서 재정의하지 않으면 사용 불가능.
- 순수 가상 함수는 virtual 키워드와 함께 = 0으로 표시된다. → 즉 virtual 키워드만 있으면 가상 함수이고 =0이 같이 붙으면 순수 가상 함수라는 말임.
class Base {
public:
virtual void pureVirtualFunction() const = 0;
};
추상 클래스
- C++에서는 하나 이상의 순수 가상 함수를 포함하는 클래스를 추상 클래스(abstract class)라고 함.
- 이러한 추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가진 함수의 집합을 정의할 수 있게 해준다.
- 반드시 사용되어야 하는 멤버 함수를 추상 클래스에 순수 가상 함수로 선언해 놓으면, 이 클래스로부터 파생된 모든 클래스에서는 이 가상 함수를 반드시 재정의 해야함.
- 추상 클래스는 객체를 직접 생성할 수 없다. 대신, 이 클래스를 상속하여 파생 클래스에서 순수 가상함수를 구현하여 사용됨.
- 추상 클래스 내에 가상 함수 외에도 일반 멤버 함수가 있을 수 있음.
class AbstractClass {
public:
virtual void pureVirtualFunction() const = 0;
void normalFunction() {
// 일반 함수의 구현
}
};
위의 글을 읽어보면 약간 이런 생각이 든다.. 뭐 할 때 이게 필요한 거지?
- 이걸 생각해보면 우리가 배열, 리스트를 만든다고 가정을 해보자 배열, 리스트에는 뭐가 필요한가? → 추가, 삭제 등이 필요하다
- 배열이나 리스트 둘 다 공통적으로 필요한 멤버 함수가 있을 것이다. 이 공통으로 필요한 멤버 함수들을 추상 클래스로 만들어서 배열, 리스트에서 상속을 받은 뒤에 배열, 리스트를 만든다
- 이렇게 하면 이점이 무엇이냐? → 배열, 리스트를 각각 만들 때 어떤 기능을 빼먹지 않고 만들 수 있다. 왜? 추상 클래스에 있는 순수 가상 함수를 재정의 하지 않으면 컴파일 에러가 나기 때문.
- 그래서 좀 더 쉽게 생각하면 추상 클래스는 공통적으로 사용하는 부분들이 많이 있는 걸 정의하며 상속받아서 쓴다고 생각한다.
반응형
'C++ > C++ 가상 함수, 순수 가상 함수, 추상 클래스' 카테고리의 다른 글
C++ 가상 함수 (4) | 2024.01.24 |
---|