运行结果是什么?
father *pss1 = new sonson();
pss1->f();
delete pss1;
son *pss2 = new sonson();
pss2->f();
delete pss2;
sonson *pss3 = new sonson();
pss3->f();
delete pss3;
运行结果
sonson::f()
sonson::f()
sonson::f()
由此可见,只要在基类里写了virtual,派生类里写不写都没有影响的。最后都起到多态的效果。
此例是virtual关键字的基本用法,用于与后面其它的测试场景做对比。
其它测试
完整代码
#include <iostream>
using namespace std;
class father
{
public:
virtual void f()
{
cout<<"father::f()"<<endl;
}
};
class son : public father
{
public:
void f()
{
cout<<"son::f()"<<endl;
}
};
class sonson : public son
{
public:
void f()
{
cout<<"sonson::f()"<<endl;
}
};
int main()
{
father *pss1 = new sonson();
pss1->f();
delete pss1;
son *pss2 = new sonson();
pss2->f();
delete pss2;
sonson *pss3 = new sonson();
pss3->f();
delete pss3;
return 0;
}