C++ で Java のインターフェイスを模倣するための小さな実験を行っています。
基本クラス「Base」から継承する「Derived」クラスと、2 つのインターフェイスがあります。継承元のインターフェイスごとに、派生クラスのサイズが大きくなることに気付きました。これは、vptr ごとにより多くのスペースを追加する必要があるためです。これは私には非常に高価に思えるので、主な質問が 2 つあります。
- C++ で Java のインターフェイスを模倣するより良い方法はありますか?
- 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
}