Размер объекта класса C ++ с помощью Vptr для базового класса - PullRequest
0 голосов
/ 11 июля 2019

Каким может быть размер obj следующих производных классов. Выход в 64-битной среде - 24 и 24. Но я ожидаю, что он будет 32 и 40, принимая виртуальную таблицу для каждого класса.

Не могли бы вы уточнить, почему вывод только 24?

#include <iostream>

using namespace std;

class Base1
{
    virtual void fun1() { cout << "Base1::fun1()" << endl; }    
};
class Base2 {
    virtual void fun1() { cout << "Base2::fun1()" << endl; }    
};
class Base3 {
    virtual void fun1() { cout << "Base3::fun1()" << endl; }    
    };

class Derive : public Base1, public Base2, public Base3
{  
public:
    virtual void Fn()
    {
        cout << "Derive::Fn" << endl;
    }
    virtual void Fnc()
    {
        cout << "Derive::Fnc" << endl;
    }
};

class Derive1 : public Derive
{  
public:
    virtual void Fn1()
    {
        cout << "Derive::Fn" << endl;
    }
    virtual void Fnc2()
    {
        cout << "Derive::Fnc" << endl;
    }
};

int main()
{
    Derive obj;
    Derive1 Obj1;

    cout << sizeof(obj);
    cout << sizeof(Obj1);

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...