我正在做一个小实验,试图在 C++ 中模仿 java 的接口。
我有一个继承自基类“Base”的类“Derived”以及两个接口。我注意到,随着我继承的每个接口,我的 Derived 类的大小都会增加,因为它必须为每个 vptr 添加更多空间。这对我来说似乎非常昂贵,所以我有两个主要问题:
- 有没有更好的方法来模仿 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
}