C++,为什么只有指针或引用支持多态

这个问题在《深度探索C++对象模型》中,给予了解释:
"一个pointer或一个reference之所以支持多态,是因为它们并不引发内存中任何‘与类型有关的内存委托操作’;会受到改变的,只有它们所指向的内存的‘大小和内容解释方式’而已"。
“当一个base class object被直接初始化为(或是被指定为)一个derived class object时,derived object就会被切割以塞入较小的base type内存中,derived type将没有留下任何蛛丝马迹。多态于是不再呈现,而一个严格的编译器可以在编译时期解析一个‘通过此object而触发的virtual function调用操作’,因而回避virtual机制。如果virtual function 被定义为inline,则更有效率上的大收获”

这两段话可以总结为以下两点:
1.指针和引用类型只是将它们所指向的内存的大小和内容的解释方式改变,与对象的类型无关,相当于把指向的内存解释成了基类的类型。
2.把一个派生类对象直接赋值给基类对象,则对象的类型发生了改变,从而无法实现多态。

猜你喜欢

转载自blog.csdn.net/u012069234/article/details/113184138