C ++에 가상 함수에 대한“순수한”키워드가없는 이유는 무엇입니까?


31

나는 왜 우리가 코딩하는지 궁금해했다

virtual void MyFunction() = 0; 

그리고 아닙니다

pure virtual void MyFunction();

이 결정의 근거에 대한 참조가 있습니까?


2
의견이 없습니까? 자 그리고 나서. 이것이 C ++ 언어가 정의 된 방식이기 때문입니다.
gnasher729

4
"순수한"기능은 종종 관련이없는 것을 의미합니다.
user253751

답변:


71

에서 디자인과 C의 진화 ++ 비얀 스트로브 스트 룹 - - 애디슨 - 웨슬리 (ISBN 0-201-54330-3) - 장 13.2.3 :

흥미로운 = 0키워드는 새로운 키워드를 도입 할 수있는 확실한 대안 pure이나 새로운 키워드 abstract를받을 가능성이 없었기 때문에 선택되었습니다. 내가 제안했다면 pure, 릴리스 2.0은 추상 클래스없이 제공되었을 것입니다. 더 좋은 구문과 추상 클래스 중 하나를 선택하면 추상 클래스를 선택했습니다. 지연을 위험에 빠뜨리고 특정 싸움을 벌이는 대신 pure0을 사용하는 전통 C 및 C ++ 규칙을 사용하여 존재하지 않습니다 .

어쨌든 C ++ 표준 (§ 9.2-클래스 멤버) = 0을 보는 것을 순수 지정 자라고합니다 .


11
멋지다. PHP가 왜 그렇게 많은 못생긴 함수 이름을 가지고 있는지를 상기시켜줍니다. 해시 함수와 분배로 strlen을 사용하는 첫 번째 인터프리터가 좋기 때문에 ( i-programmer.info/news/98-languages/… )
Aitch

10
C ++ 11에 문맥 인식 키워드를 도입하면 키워드 추가로 인한 피해가 줄어 듭니다. 할 수 있어야한다 pure, 그래서 당신은 함수 정의의 마지막에 넣어 문맥 키워드를 virtual void MyFunction() pure대신 = 0과 함께 가고, final하고 override.
야크

21
따로, 거의 모든 곳에서 "순수 함수"는 출력이 입력에만 의존하고 부작용이없는 함수로 이해됩니다.
중복 제거기

2
"C ++가 X를하는 이유는 무엇입니까?" 그 책으로 대답 할 수 있습니다. 심각한 C ++ 프로그래머라면 반드시 읽어야합니다.
로봇 고트

4
@ Random832 "순수한"것이 아니라 "순수한 가상"( "100 % 가상 및 0 % 기타")입니다.
user253751
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.