【发布时间】:2011-09-08 14:42:27
【问题描述】:
这只是一个实验代码。
struct B
{
virtual B* operator -> () { return this; }
void foo () {} // edit: intentionally NOT virtual
};
struct D : B
{
virtual D* operator -> () { return this; }
void foo () {}
};
int main ()
{
B &pB = *new D;
pB->foo(); // calls B::foo() !
}
我知道operator 必须使用对象或引用来调用;因此,在上述情况下,引用 pB 是否仍然坚决支持 B 的对象?
虽然这不实用,但出于好奇,有没有办法通过pB 调用D::operator ->?
【问题讨论】:
-
当你想拥有 foo() 虚拟时,拥有 operator-> 虚拟是没有意义的。
-
我可能在这里遗漏了一些东西,但是将
void foo()设为虚拟有什么问题?operator->()在这种情况下完全没有意义,尤其是因为它只返回this。 -
@In silico,我同意,这只是一个实验代码,用于了解当
operator ->变为virtual时会发生什么。我已经编辑了我的问题。谢谢。
标签: c++ operator-overloading virtual overriding