General OOP-使用类构造函数/初始化内存使用实例化接口/协议

问题描述 投票:0回答:1

例如,如果要创建一个包含100个变量和100个函数的类,以及一个包含10个函数的接口。前面提到的类实现了此接口。然后,您将该类构造为协议/接口。您只能访问10个功能。

该类的其余部分看不见怎么办?它只是不可见,还是实际上消失了?在这种情况下,结构的行为是否有所不同?如果将其实例化为类,它将使用更多的RAM吗?

谢谢!

programming-languages
1个回答
0
投票

所以我猜你是在说这样的事情:

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'类实例,它也仍然存在并占用内存空间。一些编译器可能/将在类型信息上占用更多空间,以帮助进行类型转换,虚拟函数表和其他内容。

© www.soinside.com 2019 - 2024. All rights reserved.