2010-08-23 4 views
3

C++에서는 메소드가 선언 될 때 메서드에 할당이 추가 될 수 있음을 알았습니다.'= x'를 C++의 메소드 선언 다음에 추가했습니다.

누구에게 말해 줄 수 있습니까? 예를 들어

다음 '= 0'을 의미 미상 무엇

virtual void MyMethod() = 0; 

. :)

감사합니다 !!!

+7

당신이 C++을 의미한다고 생각합니다 ... –

+3

C#은 스트림이 교차하는 C++입니다. (스트림을 넘지 마십시오.) –

+2

가능한 순수한 가상 함수가 0으로 초기화되는 이유는 무엇입니까? (http://stackoverflow.com/questions/2156634/why-pure-virtual-function-is-initialized-by- 0) –

답변

6

순수 가상 함수라는 것을 의미합니다. 즉,이 클래스에서 사용할 수있는 실제 정의가없고 은 서브 클래스에서을 덮어 써야합니다. 실제로는 과제가 아니기 때문에 '할당'할 수있는 유일한 가치는 제로입니다.

그리고 이것은 C++ 구문입니다. C#에서는 abstract 키워드를 사용하여 동일한 작업을 수행 할 수 있습니다.

+0

이것은 OP가 C++을 의미한다고 가정합니다. C#에서는 이에 상응하는 것은'abstract' 메서드를 표시하고 시체를주지 않을 것입니다. –

+0

@Matt 예. 귀하의 의견과 동시에 편집하십시오. :) –

+2

아무 0 값도 보유하지 않습니다. * 여기서 '0'만 유효합니다 *, 문법 기호로 바로 나타납니다. '0L' 또는 다른 것이 작동하지 않습니다. 즉 어떤 컴파일러에서는'NULL'을 대신 사용하기 때문에 (다른 언어에서는'0'으로 확장되기 때문에) 작동하지 않을 수 있습니다. –

2

C#에서는 구문 오류입니다.

C++을 의미하는 경우 calmh의 대답을 참조하십시오.

4

C++에서이 방법은 순수 가상 메서드임을 의미합니다.

즉,이 특정 클래스 유형의 인스턴스를 인스턴스화 할 수 없습니다. 이 클래스에서 파생 된 클래스의 인스턴스 만 만들 수 있습니다.이 클래스는 기본 클래스의 모든 순수 가상 메서드를 재정의합니다.

순수 가상 메서드가있는 기본 클래스는 의 구현 클래스가있는 클래스를 파생 한 인터페이스를 정의하며 자체적으로 사용하기위한 것이 아닙니다. 나는 순수 가상 함수를 알고


달리이 무엇 calmh 주장, 지금까지의 구현 될 수있는 그리고 그들은 명시 적으로 호출 할 수 있습니다.

#include <cstdio> 

class A 
{ 
public: 
    virtual void foo() const = 0; //pure virtual 
}; 

void A::foo() const { puts("A::foo"); } 

class B: public A 
{ 
public: 
    virtual void foo() const { puts("B::foo"); } 
}; 

int main() 
{ 
    //A a; //this would be an error - main point of having pure virtual functions 
    B b; 
    b.foo(); 
    b.A::foo(); 
} 

는 일반적으로 하나의 가상 소멸자 (이 경우는 정의 할 수있다) 기본 클래스의 순수 아마도 경우를 제외하고,하지만,이 작업을 수행하지 않을 것입니다.

+0

또한, (지금, 나는 약간의 pedantry 모드로 들어갑니다.) 그가 쓰는 것과는 반대로, 어떤 서브 클래스도 그것을 덮어 씌울 수 있습니다. 또한 추상화 될 것입니다. 그러나 아무도 그 객체를 만들지 않으면 (기본 클래스 하위 객체를 제외하고), 괜찮습니다. –

관련 문제