问题描述
- Override和hide在内存中是怎么实现的?
-
今天老师讲了这个,说是让记住就好了,我想用内存来解释更容易理解吧。
Hide是一个static定义的方法,用static定义后在栈中就划分出位置进行存储了,所以定义的方法不容易改变,而Override没有想出来。可以这么理解吗?求大神解答
解决方案
这是由字节码来决定的,static方法会由invokestatic指令调用,而override方法会由invokevirtual指令调用,如果想要了解可以看看虚拟机方面的东西
解决方案二:
Override:(想不到比较贴切的翻译)指在继承时,父类函数声明为 virtual , 子类重新声明和实现该函数(函数名和参数完全相同,返回值不做约束)。子类该函数可以声明为 virtual ,也可以不加,不做限制,但是如果该子类还会继续被重载,则最好也声明为 virtual 。正是因为有virtual和Override的机制,C++才能够实现多态。
Hide:继承结构中的函数隐藏,指父类中声明了函数,子类中声明和定义了完全一致的函数,但是父类中函数没有声明为vitual,此时子类中的同名同参数函数会完全隐藏父类的函数。貌似和Override很像,但是其实现机制和Override完全不同,且会导致问题,应该避免使用。( virtual机制是使用虚表(vtable)实现的,虚表维护一个虚函数指针列表,但一个对象的某个虚函数被调用的时候,去虚表中查找并决定调用的是哪个函数,具体的实现,小编下次在讲。)
解决方案三:
override是重写,这个跟它的定义类型有关系吧!static就是堆,否则栈
解决方案四:
static的意思是这个对象或方法可以被任何其他类引用,override的意思是重写
解决方案五:
可以这么理解吧,一切皆是对象,你可以把标记为virtual的函数理解为一个动态的变量,基类中可以实现这个变量,在overide后,实际上是在派生类中改写了该变量,由于作用域的关系,所以多个派生类在调用该函数时不会造成影响。所以这也成就了多态。
时间: 2024-09-05 04:07:14