在下面的程序中,基類A中的函數'f'對於派生類B的對象是隱藏的。但是當我通過const A * d調用函數f B的指針對象,來自基類的函數f被調用。如果我刪除了指針的const說明符(即A * d),則派生類中的函數'f'被調用。我的查詢如何常量在這裏有所作爲?謝謝你的幫助。通過指向const的指針調用虛擬函數基類
#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;
}
輸出(與常量A * d): B ::˚F A ::˚F常量
輸出(與A * d) B ::˚F B ::˚F