多级继承和多态性

Multilevel Inheritance and Polymorphism

本文关键字:多态性 继承 多级      更新时间:2023-10-16
class Player
{
protected:
  string type;
  int rank;
public:
  virtual void printType()
  {
      cout<<"Calling Class Player, type is: general Player"<<endl;
  }
};

//class FootballPlayer: Derived from Player
class FootballPlayer: public  Player 
{
protected:
public:
  virtual void printRank()
  {
    cout<<"Calling Class FootballPlayer, Rank is: Football Player rank"<<endl;
  }  
  void printType()
  {
    cout<<"Calling Class FootballPlayer, type is: Football Player"<<endl;
  }
};
class MaleFootballPlayer: public FootballPlayer  
{
public:
  void printType()
  {
    cout<<"Calling Class MaleFootballPlayer, type is: Male Football Player"<<endl;
  }

  void printRank()
  {
    cout<<"Calling Class MaleFootballPlayer, Rank is: Male Player rank"<<endl;
  }
};
//class CricketPlayer: Derived from Player
class CricketPlayer: public Player
{
protected:
public:
  void printType()
  {
    cout<<"Calling Class CricketPlayer, type is: Cricket Player"<<endl;
  }
};

int  main(int argc, const char * argv[])
{
  FootballPlayer fbplayer;
  CricketPlayer crplayer;
  MaleFootballPlayer malefbplayer;

  FootballPlayer *fbplayerPtr;
  fbplayerPtr=&malefbplayer;
  fbplayerPtr->printType();

  return 0; 
} 

当我运行程序时,我得到的输出是,

调用类 MaleFootballPlayer

,类型为:Male Football Player

我正在创建一个基类指针(足球运动员

)并分配给派生类对象(男性足球运动员),它应该调用属于基类的函数(因为它不是虚拟的),输出应该是"调用类 FootBallPlayer,类型是:足球运动员"。

希望让我的概念清晰。

谢谢。

由于 MaleFootballPlayer 对象的地址包含在 FootballPlayer 类型指针和在基实现中声明为虚拟的 printType() 方法中,因此它被派生类 MaleFootballPlayer 函数在运行时重写。这就是发生这种情况的原因。虚拟表包含两个类的两个 printType() 函数的指针,但在运行时选择了派生类 printType() 函数指针。