▶순수 가상 함수
2022.08.12 - [C++ 프로그래밍/클래스] - 다형성-가상 함수와 동적 바인딩의 의미
다형성-가상 함수와 동적 바인딩의 의미
가상(virtual) 함수는 실제로는 어떤 함수가 실행될지 결정되기도 전에 미리 사용되었다고 해서 가상이라는 이름을 얻었습니다. 가상 함수는 실행시간 다형성을 구현하는 방법으로, 소프트웨어의
onesside-world.tistory.com
여기서 구현한 그래픽 에디터의 객체들은 화면에 그리는 방법이 각기 다릅니다.
사각형이나 원을 그리는 알고리즘은 각기 다릅니다.
그렇기 때문에 draw() 함수에서 어떤 일을 해야 할지가 명확합니다.
그런데, Shape 부모 클래스는 좀 다릅니다.
모든 자식 클래스들이 draw()라는 동작을 가져야 하므로 부모 클래스에서 이 함수를 가상으로 선언했습니다.
그런데, Shape는 도대체 무엇을 그려야 할까요? (´・ω・`)?
명확하지가 않습니다.
C++에서는 상속을 위한 설계의 목적으로 함수를 선언하지만 부모 클래스에서는 구현하지 않는 방법이 있습니다.
즉, 함수의 헤더만 존재하고 몸체는 없는 함수를 만드는 것입니다.
이것을 순수 가상 함수(pure virtual function)이라고 합니다.
다음은 순수 가상 함수를 선언하는 문장입니다.
virtual 반환형 함수이름(매개변수리스트) = 0;
가상 함수에 0(NULL)을 대입하여 구현하지 않겠다는 뜻입니다.
예를 들면, virtual void draw() = 0; 입니다.
▶추상 클래스
멤버 함수들 중에 순수 가상 함수(pure virtual function)가 하나라도 있는 클래스를 추상 클래스(abstract class)라고 부릅니다.
추상 클래스는 다음과 같은 특징을 갖는데,
- 클래스가 완전하지 않으므로 객체를 생성하지 못한다.
- 객체를 생성할 수 없다고 포인터 변수를 선언할 수 없는 것은 아니다. 참조자도 마찬가지로 사용 가능
그럼 더 복잡하게 상상해봅시다.
부모 클래스에 순수 가상 함수가 2개가 있고, 자식 클래스에서 1개만 구현되어 있으면 그 자식 클래스는 객체를 생성할 수 있을 까요? (´・ω・`)?
답은 아니오 입니다.
순수 가상 함수들을 모두 구현해야 드디어 완전한 클래스가 되게 됩니다.
정적으로든 동적으로든 객체를 만들 수 있게 됩니다.
'C++ 프로그래밍 > 클래스' 카테고리의 다른 글
예외 처리란? (1) | 2022.08.22 |
---|---|
프랜드 선언 (1) | 2022.08.22 |
다형성-가상 함수와 객체의 크기 (0) | 2022.08.22 |
다형성-가상 함수와 동적 바인딩의 의미 (0) | 2022.08.12 |
다형성-다형성이란? (0) | 2022.08.12 |