我知道每个成员函数中只有一个实例存在于内存中,并且该类的每个对象都使用它,但是你可以通过解释它是如何理解非虚拟和虚拟继承和覆盖的工作原理来帮助我理解它通常在低水平实现,以及如何在记忆中布置?
答案 0 :(得分:0)
我不知道在那个级别上可以轻松获得大量信息。 C ++标准倾向于避免此类实现细节。我所知道的最好的书是#34;在C ++对象模型中#34;作者:Stan Lippman。它已经很老了,但基本面可能仍然有效。
答案 1 :(得分:0)
如何实现继承,虚拟和覆盖不是标准的一部分,每个编译器都可以自由地以任何方式实现它。
虽然,据我所知,以下是大多数编译器通常使用的通用原则:
当调用虚函数时,编译器实际上会跟随指向vtable的指针,在vtable中读取被调用函数的函数指针,然后运行该函数。
为了更好地理解这一原则的低级实现,您可以查看this article
多重继承会使事情变得更复杂,因为数据会在内存中移位: