vptr

    2

    2답변

    vtable이 실제로 어떻게 빌드되었는지 알아보기로 결심했습니다. 그래서 디버거를 열었고 이상한 것을 발견했습니다. 노드 ptr에는 몇 개의 vptr이 있습니다. 나는 항상 객체 당 하나의 vptr 만 있다고 생각했다. 아무도 나에게 여기에 무슨 일이 일어 났는지 설명 할 수 있니? #include <iostream> using namespace std;

    0

    2답변

    이 줄을 이해 도움말 및이 게시물에 건너 온 : 그것은 잘 작동하고 나는 VTABLE 항목을 통해 기능을 호출 할 수 있습니다 http://www.codeproject.com/Tips/90875/Displaying-vtable-when-debugging . 하지만 데오의이 행을 이해하는 데 문제가 : void (**vt)() = *(void (***)())

    4

    4답변

    가상 함수 호출 해결을 구현하는 방법은 C++ 스탠드 래드의 일부가 아니며 vptr이나 v-table에 대해서는 아무 것도 말하지 않지만 여기서이 질문을하겠습니다. 사실 v-table은 컴파일러가 가상 함수 호출 해결을 구현하는 데 사용되는 일반적인 기술이라고 들었습니다. 이것에 대한 내 주장은 프로세스 당 클래스 당 가상 테이블 만 필요하다는 것입니다.

    4

    6답변

    순수 가상 함수가있는 기본 클래스를 상속하는 두 클래스가 있다고 가정 해 보겠습니다. 두 클래스 모두 해당 함수의 자체 버전을 구현하지만 멤버 변수를 추가하지 않아 크기가 동일합니다. 이제 때때로 프로그램 실행 도중에 모든 데이터를 복사하지 않고 한 클래스를 다른 클래스로 변환하려고합니다. 그래서 기본적으로 다른 클래스의 가상 테이블을 사용하게하고 싶습니다

    2

    2답변

    나는 C++에서 어떤 일이 일어날지를 보려고 노력했다. 비슷한 방법으로 객체의 배열을 "끊으려고"Java에서 시도 할 수있다. Java에서 우리는 Double [] 형식의 배열을 가질 수 있습니다. 예를 들어, Double은 Number의 하위 클래스이므로 Number []로 업 캐스트하고 Array에 Number의 다른 하위 클래스를 추가하려고합니다 (예

    -4

    2답변

    왜 기본 생성자 만 vptr (가상 테이블 포인터) 및 vtable (가상 테이블) 만 만들 수 있습니까? 매개 변수 생성자가 할 수없는 이유

    0

    3답변

    어디서나 문서화되어 있는지 확신 할 수 없습니다. 가상 함수의 경우, 각 클래스는 가상 테이블이라는 함수 포인터 배열에 대한 포인터 인 vptr을 보유하고 있습니다. vptr의 프로토 타입이 무엇인지 알고 싶습니다. 예를 들어 다음과 같이 클래스가 선언 된 경우, class A { int a; public: A(){} virtu

    0

    2답변

    하위 객체에 vptr에서의 존재, 및 이로부터 파생 된 클래스 :가 class base { public: virtual ~base() {} }; class der : base {}; main() { int a = sizeof(base); // = 4 , fine ! int b = sizeof(der); // = 4

    1

    5답변

    다음 코드 #include <stdio.h> class Parent { public: virtual void func() {printf("Parent\n");} }; class Child1 : public Parent { virtual void func() {printf("Child1\n");} }; class Child

    -2

    3답변

    나는 최근에 C++ 가상 테이블에 대해 의문을 가지고 있습니다. 왜 C++은 가상 테이블을 사용합니까? => C++ 컴파일러는 실제 함수 주소 ---> 이유를 모르기 때문에? => C++ 컴파일러는 정확한 유형 모르기 때문에 (고양이? 개? 동물?) 객체의 에 대한 포인터 "panimal"점 --- 왜? 컴파일러가 객체 유형을 알아낼 수있는 방법이 있습니까