어떻게 내부 컴파일러가 wheather 클래스가 추상 (우리는 객체를 생성 할 수없는)이라는 것을 식별합니까?C++에서 컴파일러가 클래스를 추상화 할 수 있는지 여부를 설명 할 수 있습니까?
답변
컴파일러는 클래스 또는 클래스에서 파생 된 클래스의 순수 가상 함수를 검사 할만큼 똑똑합니다.
클래스 자체가 순수 가상 함수 [Ref 1]을 정의하면 함수 본문을 정의하는지 여부와 관계없이 추상 클래스로 플래그됩니다.
클래스가 순수 가상 함수를 사용하여 클래스를 상속하는 경우 은이 순수 가상 함수에 대한 정의를 제공해야합니다. 추상으로 플래그가 지정되지 않은 경우.
[참고 1]
virtual void doSomething() = 0;
^^^^^
P.S : 예 순수 가상 함수가 정의를 할 수 있습니다.
추상 클래스에는 하나 이상의 순수 가상 함수가 포함됩니다. 그것의, 추상 클래스의 정의에 경우이에서 파생 오버라이드 (override)하지 않는이
virtual void foo() = 0;
모든 클래스와 같은 뭔가가이 같은 기능은 정의를 검사하고보고함으로써 추상적 인
될 것입니다 코스. 이게 또 어떻게 될까요?
"이게 또 어떻게 될까요?" "추상"클래스의 C++ 정의는 C++에만 해당되며 표준에 깊이 숨겨져 있습니다. 물론 C++ 방식 만이 유일한 방법은 아닙니다. '추상적'키워드. C++에만 국한된 것은 적어도 하나의 public 생성자가 존재하는지 테스트하는 것입니다. 하나 이상의 public 생성자가없는 클래스의 인스턴스는 만들 수 없습니다. 그것은 내 눈의 추상 클래스이지만 C++의 눈에는 아닙니다. –
@DavidHammen : C++에 관한 질문을 할 때 C++ 방식이 유일한 방법입니다 *. 다른 방법은 정의에 의한 것이기 때문에 C++이 아닙니다. –
@ NicolBolas : C++ 정의를 이해합니다. 'is_default_constructible'은 C++ 98/03에서 제대로 작동하지 않기 때문에 이것은 단지 애호가입니다. C++ 11이 가까운 장래에 오프 - 리미트가되는 복합체 ... –
클래스의 멤버 중 하나 이상이 추상 클래스는 추상 클래스입니다. 따라서 클래스에 하나 이상의 순수 가상 함수가 포함되어 있으면 컴파일러 관점에서 추상입니다.
virtual void PureVirtualMethod() = 0; // Any class that has methods
// with such declaration is abstract.
- 1. Java에서 클래스를 사용할 수 있는지 감지 할 수 있습니까?
- 2. window.opener에 액세스 할 수 있는지 여부를 어떻게 확인할 수 있습니까?
- 3. 클래스를 직렬화 할 수 있는지 어떻게 알 수 있습니까?
- 4. 파이썬 : 내가 껍데기 껍질에 있는지 여부를 감지 할 수 있습니까?
- 5. 사진에 포커스가 있는지 여부를 프로그래밍 방식으로 감지 할 수 있습니까?
- 6. 컴파일러가 확장 코드없이 컴파일 할 수 있습니까?
- 7. 크로스 캐스트가 작동 할 수 있는지 여부를 확인 하시겠습니까?
- 8. 일부 OpenSudoku 소스 코드에서이 InputMethod 클래스를 설명 할 수 있습니까?
- 9. 유니온을 C에서 자체 참조 할 수 있습니까?
- 10. 누군가이 파일을 설명 할 수 있습니까?
- 11. 누군가이 코드를 나에게 설명 할 수 있습니까?
- 12. 어떻게 C에서 오디오를 녹음 할 수 있습니까?
- 13. 다른 클래스를 인스턴스화 할 수있는 클래스를 제한 할 수 있습니까?
- 14. javac 컴파일 오류 - "... 추상화 할 수 없습니다."
- 15. JAXB : 클래스가 주석없이 마샬 할 수 있는지 여부를 알려주는 방법
- 16. CSS3 전환으로 속성을 애니메이션화 할 수 있는지 여부를 감지 하시겠습니까?
- 17. 장치에 진동이 있는지 여부를 결정할 수 있습니까?
- 18. 파일이 있는지 여부를 어떻게 알 수 있습니까?
- 19. 누군가이 자바 코드를 설명 할 수 있습니까
- 20. 누구든지이 프로그램을 설명 할 수 있습니까?
- 21. 하나는이 프로그램의 출력을 설명 할 수 있습니까?
- 22. 데이터베이스의 연관 관계를 설명 할 수 있습니까?
- 23. ClearCase와의 병합을 어떻게 설명 할 수 있습니까?
- 24. 누군가 Microsoft Unity를 설명 할 수 있습니까?
- 25. 이 프로세스를 단계별로 설명 할 수 있습니까?
- 26. 누군가가 어떻게 작동하는지 설명 할 수 있습니까?
- 27. JPQL에서 테이블 쿼리를 설명 할 수 있습니까?
- 28. 누구나 BufferedInputStream의 원리를 설명 할 수 있습니까?
- 29. 누군가가이 부분의 방법을 설명 할 수 있습니까
- 30. 누군가이 CSS 코드를 설명 할 수 있습니까?
클래스에 최소한 하나의 순수 가상 함수가 있으면 추상이라고 말할 수 있습니다. 컴파일러가 이것을 어떻게 확인하고 있는지 설명해주십시오. –
"* 컴파일러가 이것을 어떻게 식별하고 있는지 설명해주십시오. *"컴파일러가 클래스 정의를 식별하는 것과 같은 방법은 C++ 문법을 따르는 것입니다. 나는 그 이상의 질문을 이해하지 못한다. 컴파일러는 C++을 컴파일하고 C++은 순수 가상 함수 선언이 무엇인지 정의합니다. –
"컴파일러에 달려있다"는 대답은 이것뿐입니다. 표준은 컴파일러가이 작업을 수행하는 방식을 지정하지 않습니다. – juanchopanza