鉴于代码:
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.
我可以这样做,当我调用派生类的继承方法时,它不会反过来调用基类的方法而不是重载方法,除了重载第一个方法?
答案 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;
}