Oop 多态性期间内存会发生什么变化?

Oop 多态性期间内存会发生什么变化?,oop,memory,language-agnostic,Oop,Memory,Language Agnostic,我一直想知道,当你将一个对象指针投射到它的基类时,内存到底会发生什么变化?我假设存储子类中所有成员函数和变量的内存仍然存在,只是现在“禁止使用”。是这样吗?如果是,抽象/虚拟函数是如何工作的?在这种情况下,如何从基类指针调用子类实现 此外,它是否因语言而异?显然C++使用堆栈和堆,而java只使用堆。这是否意味着多态关系的内存处理方式不同 与此相关的私有、受保护甚至虚拟继承是如何工作的?您要问的是实现细节。 一般来说,通常的方法是将指针指针存储到对象的一部分(函数不是实际对象内存占用的一部分),

我一直想知道,当你将一个对象指针投射到它的基类时,内存到底会发生什么变化?我假设存储子类中所有成员函数和变量的内存仍然存在,只是现在“禁止使用”。是这样吗?如果是,抽象/虚拟函数是如何工作的?在这种情况下,如何从基类指针调用子类实现

此外,它是否因语言而异?显然C++使用堆栈和堆,而java只使用堆。这是否意味着多态关系的内存处理方式不同


与此相关的私有、受保护甚至虚拟继承是如何工作的?

您要问的是实现细节。
一般来说,通常的方法是将指针指针存储到对象的一部分(函数不是实际对象内存占用的一部分),并且取决于这个表中的具体对象(C++中,在代码中,有些类似的构造> java < /代码>我想象)指向实际运行时对象的方法,因此,使用指向基类的指针并不影响实际调用由派生类重写的方法

像私有继承、受保护继承甚至虚拟继承这样的东西又是如何实现的呢 与此相关的工作


这与你的问题无关。修饰符(public/private/protected)是一种静态时间结构。即编译器根据修饰符强制使用。基本内存在这里是不相关的。

通常,内存根本不会发生任何变化。强制转换只会影响程序中使用指针的其他人如何使用指针

查看此链接以了解有关如何实现此功能的更多信息: