Si, por ejemplo, crea una clase con 100 variables y 100 funciones, y una interfaz con 10 funciones. La clase antes mencionada implementa esta interfaz. Luego construye la clase como un protocolo / interfaz. Solo puede acceder a las 10 funciones.

¿Qué pasa con el resto de la clase que no es visible? ¿Simplemente no es visible o realmente desaparece? ¿Una estructura se comporta de manera diferente en este caso? ¿Utilizará más RAM si se crea una instancia como una clase en su lugar?

¡Gracias!

0
Phantom454 22 oct. 2019 a las 18:45

1 respuesta

La mejor respuesta

Así que supongo que estás hablando de algo como esto:

class SomeInterface {
    public:
    virtual void foo();
}

class SomeClass : public SomeInterface {
    public:
    char buffer[1024];

    virtual void foo() override {

    }

}

SomeInterface* inter = new SomeClass();

Entonces, como mencionaste, 'inter' solo puede acceder a las funciones de la interfaz, como en mi ejemplo 'foo'.

Esta pregunta, supongo que varía según el lenguaje de programación con el que esté tratando. Supongo que siempre que 'inter' nunca se haya convertido en 'SomeClass' o más allá, algunos lenguajes de programación podrían excluir la creación de instancias de SomeClass por completo, suponiendo que 'SomeInterface' no sea puramente virtual como en este caso.

Pero a su pregunta, puedo responder por algo como C / C ++. En este ejemplo, si diseccionáramos la memoria en 'inter', se vería así.

Instance of SomeInterface [0 -> sizeof(SomeInterface)]
Instance of SomeClass [sizeof(SomeInterface) -> sizeof(SomeInterface) + sizeof(SomeClass)]

Este mapa puede variar según el compilador, pero en el sentido general, aunque no tenga acceso a la instancia de la clase 'SomeClass', todavía existe y ocupa espacio en la memoria. Es posible que algunos compiladores ocupen más espacio con información de tipo para ayudar en la conversión, tablas de funciones virtuales y otras cosas.

0
Maxwell Kunes 26 oct. 2019 a las 05:58