例如,如果要创建一个包含100个变量和100个函数的类,以及一个包含10个函数的接口。前面提到的类实现了此接口。然后,您将该类构造为协议/接口。您只能访问10个功能。
该类的其余部分看不见怎么办?它只是不可见,还是实际上消失了?在这种情况下,结构的行为是否有所不同?如果将其实例化为类,它将使用更多的RAM吗?
谢谢!
所以我猜你是在说这样的事情:
class SomeInterface {
public:
virtual void foo();
}
class SomeClass : public SomeInterface {
public:
char buffer[1024];
virtual void foo() override {
}
}
SomeInterface* inter = new SomeClass();
因此,正如您所提到的,“ inter”只能访问接口的功能,例如在我的示例“ foo”中。
这个问题,我想您要处理的编程语言会有所不同。我猜想,只要'inter'从未被强制转换为'SomeClass'或更高,某些编程语言可能会完全拒绝SomeClass的实例化,假设'SomeInterface'不是像在这种情况下那样的纯虚拟。
但是对于您的问题,我可以回答类似C / C ++的问题。在此示例中,如果我们要在“ inter”处解剖内存,它将看起来像这样。
Instance of SomeInterface [0 -> sizeof(SomeInterface)]
Instance of SomeClass [sizeof(SomeInterface) -> sizeof(SomeInterface) + sizeof(SomeClass)]
该映射可能会根据编译器的不同而有所不同,但是从一般意义上讲,即使您无权访问'SomeClass'类实例,它也仍然存在并占用内存空间。一些编译器可能/将在类型信息上占用更多空间,以帮助进行类型转换,虚拟函数表和其他内容。