我正在经历这个Book我无法解决这个问题:
如果 B::f(int)
隐藏了 A::f()
,为什么 pa1->f();
没有报错?
名称隐藏是否意味着 f()
函数不存在于 class B
中?如果 pa1
指向 class B
的对象,那么 pa1->f();
应该会导致错误,就像 b.f ()
确实如此!
请解释一下,因为我无法通过书来理解它! 提前致谢!
#include <iostream>
using namespace std;
struct A {
virtual void f() { cout << "Class A" << endl; }
};
struct B: A {
void f(int) { cout << "Class B" << endl; }
};
struct C: B {
void f() { cout << "Class C" << endl; }
};
int main() {
B b; C c;
A* pa1 = &b;
A* pa2 = &c;
// b.f();
pa1->f();
pa2->f();
}
最佳答案
如果您试图从 B
的范围内调用 f()
将会出错。但是,您是通过指向基类的指针来调用它的。名称查找和重载解析是根据对象的静态类型完成的,在本例中为 A*
。从那里,f()
是可见的。
关于c++ - 基类的继承和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18849578/