Я делаю небольшой эксперимент, чтобы попытаться имитировать интерфейсы Java на C++.Размер объекта C++ увеличивается по мере добавления дополнительных интерфейсов ... делает ли это Java?
У меня есть класс «Производный», наследующий базовый класс «База», а также два интерфейса. Я замечаю, что с каждым унаследованным интерфейсом размер моего класса Derived увеличивается, потому что он должен добавить больше места для каждого vptr. Мне кажется, это очень дорого, поэтому у меня есть два основных вопроса:
- Есть ли лучший способ имитировать интерфейсы Java на C++?
- Увеличивает ли размер объекта Java каждый интерфейс?
Вот код, я использую:
#include <iostream>
class Base {
public:
int derp;
virtual int getHerp() = 0;
virtual ~Base() { }
};
class Interface1 {
public:
virtual int getFlippy() = 0;
virtual ~Interface1() { }
};
class Interface2 {
public:
virtual int getSpiky() = 0;
virtual ~Interface2() { }
};
class Derived : public Base, public Interface1, public Interface2 {
public:
int herp;
virtual int getHerp() { return herp; }
virtual int getFlippy() { return 6; }
virtual int getSpiky() { return 7; }
};
int main() {
Derived d;
std::cout << sizeof(d) << std::endl;
// prints 40. presumably, Derived/Base vptr + derp + Interface1vptr + Interface2 vptr + herp
}
Обратите внимание, что OP ** не ** имитирует интерфейсы Java. –