类中未调用虚函数

问题描述

在下面的 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 (将#修改为@)