在下面的程序中,基类A中的函数'f'对于派生类B的对象是隐藏的。但是当我通过指向B的对象的const A *d调用函数f时,来自基类的函数f是被调用。如果我从派生类中删除指针(即A * d)函数'f'的常量说明符,则调用。我的疑问是 constness 在这里有何不同?谢谢你的帮助。
#include <iostream>
class A
{
public:
virtual void f(int n) { std::cout << "A::f\n"; }
virtual ~A() { }
void f(int n) const { std::cout << "A::f const\n"; }
};
class B
: public A
{
public:
void f(int n) { std::cout << "B::f\n"; }
void f(int n) const { std::cout << "B::f const\n"; }
};
int main()
{
const A a;
B b;
A &c = b;
const A *d = &b;
c.f(1);
d->f(1);
return 0;
}
输出(带有 const A *d): B::f A::f const
输出(带 A* d) B::f B::f