【发布时间】:2011-04-28 15:28:16
【问题描述】:
我想我理解虚方法和 vtable 的概念,但我不明白为什么将对象作为指针(或引用)传递和按值传递(哪种废弃 vtable 或什么?)
为什么会有这样的工作:
Material* m = new Texture;
poly->setMaterial(m);
// methods from Texture are called if I keep carrying the pointer around
不是这个?:
Material m = Texture();
poly->setMaterial(m);
// methods from Material are called if I pass the value around
【问题讨论】:
-
什么是
poly,它与什么有什么关系?您实际的虚拟通话在哪里?为什么你的setMaterial方法可以同时接受指针和值?是不是超载了? -
@AndreyT 这不是真正的代码,我只是写了两个可能的示例。
-
很好,但您的问题是关于虚拟通话的。然而,您的示例(无论是真实的还是人造的)根本不包括任何相关的虚拟通话。
标签: c++ inheritance polymorphism virtual-functions object-slicing