您的位置:首页 > 编程语言 > C语言/C++

C++ primer 这本书上有这么两句话“派生类虚函数调用基类版本时,必须显式使用作用域操作符。如果派生类函数忽略了这样做,则函数调用会在运行时确定并且将是一个自身调用,从而导致无穷递归。”

2011-11-08 20:42 471 查看
(整理)

当你实现派生类虚函数时,如果函数体内需要调用基类的虚函数版本时,需要显式使用基类的作用域操作符,否则就会在派生类作用域内调用派生类版本的虚函数,这样会导致无穷递归。

就是自己在调用自己呀,没有指明调用的是基类的虚函数,自动认为是调用派生类的虚函数,然后就再次调用了,一直进行下去了

struct A

{

virtual void foo(void) { }

}

struct B: public A

{

void foo(void)

{

foo(); // 递归调用自己,即 B::foo()

A::foo(); // 明确告诉编译器,调用的是 A::foo(), 而不是自己

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ struct 编译器
相关文章推荐