virtual关键字在父类

运行结果是什么?

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关键字的基本用法,用于与后面其它的测试场景做对比。

其它测试

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;
}
发布了407 篇原创文章 · 获赞 328 · 访问量 111万+

猜你喜欢

转载自blog.csdn.net/mishifangxiangdefeng/article/details/100583902