2011-12-13 2 views

답변

6

이것은 구성원 함수가 순수 가상이라는 것을 의미합니다. 이는 구현이 전혀 없음을 의미합니다. 따라서 클래스는 인스턴스화 될 수 없으므로 ("추상화"됨) 파생 클래스가 (결국) 가상 멤버 함수를 구현해야하는 기본 클래스로만 사용될 수 있습니다.

순수 가상 멤버 함수 feed()이있는 추상 Animal 클래스가 있습니다. 모든 동물은 항상 콘크리트 (즉, 파생 된) 동물의 인스턴스이므로 순수한 추상 동물은 존재할 수 없습니다. 아주 동물은 어떤 방식으로 먹이를 먹기는하지만 모든 동물에 공통적 인 보편적 인 기본 구현은 없습니다. 우리는 단지 feed()이 존재한다는 것을 알고 있습니다. 그러나 그것은 항상 콘크리트 파생 된 동물에 의해 구체적으로 구현되어야합니다.

(당신이 실제로 순수 가상 함수의 구현을 제공 할 수 있습니다. 당신은 여전히 ​​클래스를 인스턴스화 할 수 있지만 파생 클래스는 기본 함수를 호출 할 수 있습니다. 이것은 매우 드물게 유용하고 아마도 가난 스타일이다.) 당신은 파생 클래스에서이 기능을 구현해야

+0

만약 내가 추측해야만했다면, 실제로''0 '은 클래스의 vtable에있는 함수 포인터가 null이라는 사실을 반영한다고 말할 수 있습니다. ... –

+1

나는 당신의 노트 텍스트가 진실한 가상 메소드를위한 구현이 될 수 있다는 진술에 관해서 더 생각할 필요가 있다고 생각한다. 순수 가상 메소드가 "구현이 없다"는 것은 틀린 많은 다른 대답들이있다. – franji1

+0

@ franji1 : 어쩌면,하지만 실제로는 매우 유용한 일이 아닙니다. –

1

이것은 "순수 가상 함수"로 알려져 있으며 추상 클래스가 구성되는 방법입니다. 자세한 내용은 the wikipedia article을 참조하십시오.

예제를 사용하려면 KeyboardListener 클래스에서 keyPressed(void) 함수가 선언되었지만 구현되지 않았습니다. 즉, 인터페이스의 일부로 간주되며 하위 클래스는 * 기능을 구현하지만 부모 클래스 자체는 구현해야합니다. 이 아닙니다. 부모 클래스의 인스턴스는 만들 수 없습니다. 부모 클래스는 완전히 정의 된 자식 클래스의 인스턴스에 대한 포인터로만 사용될 수 있습니다. 그것을 구현하는 필요하지

* 말했다되고 그건

, 자식 클래스가있다 - 그러나 그들은 당신이 그 자식 클래스를 인스턴스화 할 수없는 경우 중 하나, 그들의 후손은 마지막으로 keyPressed(void)을 구현하는.

1

, 그것은이다 순수 가상 (이름이 말하는 것처럼)와 제로, = 0) (가있는 경우 암시 아니 구현 (이 없습니다 구현을 할 수있는 곳). 순수 가상 함수가있는 클래스는 추상 기본 클래스 등으로 불립니다. 인스턴스화 할 수 없습니다.

이들을 사용하려면 추상 클래스를 서브 클래스하고 파생 클래스에 순수 가상 메서드를 구현해야합니다. = 0

1

일반 가상 반대로 순수 가상으로서의 기능을 나타낸다. = 0은 함수 본문을 파생 클래스로 정의하는 것을 지연합니다.

의 구분은 오랫동안 순수 가상 기능이 몸 주어진으로 만 할 수있는 적절한 클래스로 확장 인스턴스화 할 수없는 순수 가상 기능 추상적 하나를 포함하는 클래스를 만든다 .파생 클래스마다 기본 소멸자가 자동으로 제공되므로 일반적으로 순수 가상 소멸자과 함께 사용됩니다. https://stackoverflow.com/a/1219618/866333에서

:

참고 : 소멸자 예 순수 가상 기능 수 (이 가상 순수 경우에도 유일한 방법이 유용 할에 정의되어 클래스의 순서 구현을 가지고있다이다 구현을 가짐).

관련 문제