Общее ООП - создание интерфейса / протокола с использованием конструктора классов / использования памяти init - PullRequest
0 голосов
/ 22 октября 2019

Если вы, например, создаете класс с 100 переменными и 100 функциями, а также интерфейс с 10 функциями. Вышеупомянутый класс реализует этот интерфейс. Затем вы создаете класс как протокол / интерфейс. Вы можете получить доступ только к 10 функциям.

Что происходит с остальной частью класса, которая не видна? Это просто не видно, или оно действительно исчезает? Структура ведет себя иначе в этом случае? Будет ли он использовать больше ОЗУ, если вместо него был создан экземпляр класса?

Спасибо!

1 Ответ

0 голосов
/ 26 октября 2019

Итак, я предполагаю, что вы говорите о чем-то вроде этого:

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, он все еще существует и занимает место в памяти. Некоторые компиляторы могут / будут занимать больше места с информацией о типах для помощи в приведении типов, таблиц виртуальных функций и других вещей.

...