我正在阅读 Bjarne Stroustrup 的《C++ 编程语言》一书中关于虚拟函数的内容,并遇到了以下代码片段:-
class A {
//...
protected:
int someOtherField;
//...
public:
virtual void print() const;
//...
};
class B : public A {
//...
public:
void print() const;
//...
};
void B::print() const {
A::print();
cout<<A::someOtherField;
//...
}
书中写道
“像在 B::print() 中所做的那样使用范围解析运算符 (::) 调用函数可确保不使用虚拟机制。否则,B::print() 将遭受无限递归。”
我不明白为什么会这样,因为对基类函数的调用正确且明确地告诉我们正在调用 A::print() 而不是其他任何东西。为什么这可能导致无限递归?
编辑 -我放错了关键字“virtual”,对此我感到非常抱歉,但仍在探索这个问题,如果存在以下代码会发生什么?
- @HTNW 的评论提供了正确的见解
class A {
//...
void print() const;
//...
}
class B : public A {
//...
virtual void print() const;
//...
}