【发布时间】:2020-06-06 17:20:28
【问题描述】:
test 不是虚函数,在基类和派生类中都定义了。
我有一个派生类对象。它最终调用基类的test,而不是派生类中的test。
为什么会这样?
如何设置它以便根据对象类型调用测试。
当前的o/p
B func
A f1
A test
我希望它是
B func
A f1
B test
#include <iostream>
using namespace std;
class A {
protected:
void test()
{
cout<<"A test"<<endl;
}
void f1(){
cout<<"A f1" <<endl;
test();
}
};
class B: public A {
protected:
void test()
{
cout<<"B test" <<endl;
}
public:
void func(){
cout<<"B func" << endl;
f1();
}
};
int main()
{
B tmp;
tmp.func();
return 0;
}
【问题讨论】:
-
在这种情况下,您需要将功能测试虚拟化。
-
你从
A的成员调用test,所以它会调用test的A版本因为它不是一个虚函数。这就是virtual所做的。 -
有些情况下,我想在从基类 A 的对象访问时在 A 中调用 test。
f1有没有办法根据对象调用 test?使测试虚拟化似乎有效!如果虚函数在基类中有定义,是否有任何副作用/警告。
标签: c++ inheritance