多级继承和多态性
Multilevel Inheritance and Polymorphism
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() 函数指针。
相关文章:
- 继承/多态性 - 我是否被迫使用"protected"变量?
- 具有 3 级继承的基类shared_ptr的多态性
- C 中的多态性.在基类上调用继承的方法
- 模板、继承和多态性 C++
- 了解C++中的继承和多态性
- 继承多态性功能调用
- C++接口、继承、多态性
- 如何在保持多态性的同时,将成员函数添加到需要它的继承类中,而不会影响其他同级类?
- 在C++中使用多态性相对于继承的实际优势
- 收到未定义的引用错误 c++ 继承/多态性
- 多态性(继承)和价值类型
- 多种继承和多态性问题
- 如何正确组织继承类以利用多态性
- C++ 继承和多态性未知输出
- '<<'与继承和多态性超载?
- 在继承层次结构中将方法定义为虚拟方法一次,以使多态性发挥作用
- c++:多态性+多重继承顺序.继承顺序是否重要
- C++多重继承多态性
- 虚类成员函数的多态性/继承问题
- C++ 多态性 - 继承类的映射