C ++继承的方法调用基类的方法而不是重载方法

时间:2015-04-17 13:20:50

标签: c++ inheritance overloading

鉴于代码:

class A{
public:
    void callFirst()
    {
        callSecond();
    }
    void callSecond()
    {
        cout << "This an object of class A." << endl;
    }
};

class B : public A{
public:
    void callSecond()
    {
        cout << "This is an object of class B." << endl;
    }
};

int main()
{
    B b;
    b.callFirst();

    return 0;
}

我得到了输出:

This an object of class A.

我可以这样做,当我调用派生类的继承方法时,它不会反过来调用基类的方法而不是重载方法,除了重载第一个方法?

2 个答案:

答案 0 :(得分:6)

您必须标记callSecond()成员函数virtual,否则您最终会遇到编译时绑定(与运行时绑定对比)。

答案 1 :(得分:2)

你应该在A类中虚拟callSecond

#include<iostream>
using namespace std;
class A{
public:
    void callFirst()
    {
        callSecond();
    }
    virtual void callSecond()
    {
        cout << "This an object of class A." << endl;
    }
};

class B : public A{
public:
    void callSecond()
    {
        cout << "This is an object of class B." << endl;
    }
};

int main()
{
    B b;
    b.callFirst();

    return 0;
}