问题描述
在下面的 main()
函数中,d
是一个基类指针(A
类型),它指向派生类(B
类型)。然而,当在这个指针上调用成员函数 f(int)
时,即 d->f(1)
,编译器调用基类 A(标记为 #2
)中的非虚函数,即
void f(int n) const { std::cout << n; }
为什么?我期待,因为基类 A
virtual void f(int n) { std::cout << n; }
派生类 f(int)
中的两个函数 B
之一将被调用。我哪里出错了?
class A
{
public:
A() {}
public:
virtual void f(int n) { std::cout << n; } // #1
virtual ~A() { }
void f(int n) const { std::cout << n; } // #2 this function is called when d->f(1) is executed in main()
};
class B
: public A
{
public:
void f(int n) { std::cout << n; } // #3
void f(int n) const { std::cout << n; } // #4
};
int main()
{
B b;
const A* d = &b;
d->f(1); // this calls function #2 above - why?
std::cout << std::endl;
return 0;
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)