문제

인터뷰에서 C ++의 클래스 선언과 함께 가상 키워드 사용이 무엇인지 요청했으며 C ++의 클래스 선언과 함께 가상 키워드를 사용할 수 없다고 대답했습니다. 면접관은 가능하다고 말했고 나중에 테스트 해달라고 요청했습니다.

이제 직접 확인 했으므로 이것이 가능하다는 것을 알게되었고 이것은 컴파일러 오류가 아닙니다. 사실, 시각적 C ++ 컴파일러로 이와 같은 일을 할 때 :

virtual class Test
{
   int i;
};

컴파일러 경고 "경고 C4091 : 'Virtual': 변수가 선언되지 않으면 '테스트'의 왼쪽에 무시됩니다. 나는이 경고가 무엇을 의미하는지, 가상 키워드의 사용법이 무엇인지 아직 알 수 없었습니다. 도움이되는 사용법이 없다면 왜 이것이 처음에 허용되는 이유와 이것이 컴파일러 오류가 아닌가?

도움이 되었습니까?

해결책

VC ++의 버그입니다. Comeau와 GCC는 모두 코드를 거부합니다.

다른 팁

가상 다른 클래스에서 파생 할 때 사용할 수 있습니다.

class Foo : public virtual Bar
{
}

이것은 여러 상속을 사용할 때 동일한 기본 클래스의 여러 버전을 피하는 데 사용됩니다. 위키 백과 주제에 대한 좋은 기사가 있습니다.

당신은 단순히 클래스에 가상을 사용할 수 없습니다. 회원 기능에만 작동합니다

당신은 잘못된 종류의 사용법을보고 있습니다 - 나는 면접관이와 같이 가상 기본 클래스 선언을 언급하고 있다고 확신합니다.

  class A : virtual public B, public C {
    ...
  };

이것은 일반적인 관용구이며 다이아몬드 모양의 상속 트리에서 "다중 기본 클래스"시나리오를 돌아 다니는 데 사용됩니다. 그들의 일반적인 문제는 클래스 B와 클래스 C를 모두 상속하고 공통 조상 A를 공유한다는 것입니다. 사용해야합니다. B & C가 대신 가상 기본 클래스를 사용하는 경우 A의 동일한 인스턴스를 참조 하여이 문제를 해결합니다.

클래스 다이어그램으로보다 철저한 설명을 찾을 수 있습니다. 여기.

어쩌면 그는 가상 상속 / 가상 기본 클래스를 언급하고 있었을까요? 예를 들어

class A : virtual public B
{ ... }

그것은 기술적으로 클래스 정의의 일부가 될 것입니다.

그는 클래스 선언에서 가상 기본 클래스를 사용하는 것에 대해 이야기 할 수 있었습니까?

이와 같이:

class CashierQueue : virtual public Queue {};

이는 동일한 기본 클래스를 공유하는 두 개 이상의 클래스에서 상속 될 때 회원 데이터의 여러 사본을 갖는 파생 클래스를 피하려면 다중 상속에 사용됩니다.

class Queue {};
class CashierQueue : virtual public Queue {};
class LunchQueue : virtual public Queue {};
class LunchCashierQueue : public LunchQueue, public CashierQueue {};

보다 http://msdn.microsoft.com/en-us/library/wcz57btd(vs.80).aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top