문제

나는 "가상 함수가 선언된 클래스에 대해 가상 테이블이 존재합니다"라고 쓴 사람들을 많이 읽었습니다.

내 질문은 vtable이 가상 함수가 있는 클래스에 대해서만 존재하는지, 아니면 해당 클래스에서 파생된 클래스에도 존재하는지입니다.

예를 들어

class Base{
    public:
        virtual void print(){cout<<"Base Print\n";}
};
class Derived:public Base{
    public:
        void print(){cout<<"Derived print\n";}
};

//From main.cpp 
Base* b = new Derived;
b->print();

질문:파생 클래스에 대한 vtable이 없었다면 출력은 "파생 인쇄"가 아니었을 것입니다.따라서 IMO에는 가상 함수가 선언된 모든 클래스와 해당 클래스에서 상속되는 클래스에 대한 vtable이 있습니다.이 올바른지 ?

도움이 되었습니까?

해결책

가상 함수별 기능만 고려하는 한 vtable 구현에 대한 전통적인 접근 방식에서는 파생 클래스에 별도의 vtable 버전이 필요합니다. 만약에 그리고 만약에 해당 파생 클래스는 하나 이상의 가상 함수를 재정의합니다.귀하의 예에서는 Derived 가상 기능을 재정의합니다. print.부터 Derived 자체 버전이 있습니다. print, 해당 항목 Derived vtable은 그것과 다르다 Base vtable.vtable.이를 위해서는 일반적으로 별도의 vtable이 필요합니다. Derived.

만약에 Derived 아무것도 재정의하지 않았으며 공식적으로는 여전히 별도의 다형성 클래스이지만 가상 함수가 제대로 작동하도록 하려면 간단히 재사용할 수 있었습니다. Base vtable Derived 또한.따라서 기술적으로는 별도의 vtable이 필요하지 않습니다. Derived.

그러나 실제 구현에서는 일반적으로 "vtable"이라고 부르는 데이터 구조에 추가 클래스별 정보도 포함되는 경우가 많습니다.이러한 추가 정보는 클래스마다 너무 특정하기 때문에 계층 구조의 서로 다른 클래스 간에 vtable을 공유하는 것이 불가능합니다. 동일한 가상 기능 세트를 사용하더라도 마찬가지입니다.예를 들어, 일부 구현에서는 각 다형성 개체에 저장된 vtable 포인터가 클래스에 대한 소위 "RTTI 정보"도 저장하는 데이터 구조를 가리킵니다.이러한 이유로 대부분의 실제 구현에서 각 다형성 클래스는 해당 테이블에 저장된 가상 함수 포인터가 동일하더라도 자체 vtable을 갖습니다.

다른 팁

  1. WinRT 앱 (메트로가 의미하는 것이라고 가정합니다) 데스크탑 / 태블릿에서 실행되고 코드 변경없이 Windows Phone 8 장치에서 실행됩니다.첫째, 우리는 Windows Phone 8 (현재 Windows Phone 7이 아닌)에 대해 이야기하고 UI 레이아웃이 정확히 옳은 것이 아니라는 것은 아닙니다.

  2. 메트로 디자인이나 다른 모습을 모두 준수하는지 여부는 앱을 디자인 할 수 있습니다.WinRT에서 개발 된 경우 전화와 코드 호환 가능해야합니다.

Yes it's true. Actually, given base's defintion:

class derived:public base{
public:
 void print(){cout<<"derived print\n";}
};

is completely equivalent to:

class derived:public base{
public:
 virtual void print(){cout<<"derived print\n";}
};

... because you already defined print as virtual in base.

I'd wish the compiler would enforce that...

임시 수정 사항은 iTunes를 사용하여 문서 폴더에서 파일을 가져옵니다.

.plist -> 정보 속성 목록 -> 추가 :

UIFileSharingEnabled (예)

재구성하고 iTunes로 이동하여 문서 폴더에서 파일을 가져옵니다.

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