virtual关键字在父类

Posted windmissing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

以上是关于virtual关键字在父类的主要内容,如果未能解决你的问题,请参考以下文章

C#基础知识:virtual方法,abstract方法,区别

09.多态

C++——虚析构

C++ 父类指针如何调用子类的变量和函数 虚函数virtual实例

C++ 父类指针如何调用子类的变量和函数 虚函数virtual实例

C++之重载覆盖和隐藏