C++11 C++;在向量中存储基类指针的多态性

C++11 C++;在向量中存储基类指针的多态性,c++11,pointers,vector,polymorphism,C++11,Pointers,Vector,Polymorphism,我有一个基类和两个派生类。我使用基类的指针将派生类对象存储在向量中。现在我必须打印存储在vector中的数据 如何从向量中检索对象 如何确保检索到的对象属于哪个派生类 class CricketPlayer:public SlumsMember { protected: int runsScored; int wicketsTaken; int catchesTaken; public: CricketPla

我有一个基类和两个派生类。我使用基类的指针将派生类对象存储在向量中。现在我必须打印存储在vector中的数据

如何从向量中检索对象

如何确保检索到的对象属于哪个派生类

    class CricketPlayer:public SlumsMember
{
    protected:
        int runsScored;
        int wicketsTaken;
        int catchesTaken;
    public:
        CricketPlayer(int rNo,string n,double theGpa,char typ,int rScore,int theWicketTaken,int theCatchTaken);
        int getRunsScored();
        int getWicketsTaken();
        int getCatchesTaken();

};

    CricketPlayer::CricketPlayer(int rNo,string n,double theGpa,char typ,int rScore,int theWicketTaken,int theCatchTaken):
                   SlumsMember(rNo,n,theGpa,typ)
                   {
                      runsScored=rScore;
                      wicketsTaken=theWicketTaken;
                      catchesTaken=theCatchTaken;
                   }



    int CricketPlayer::getRunsScored()
    {
        return (runsScored);

    }
    int CricketPlayer::getWicketsTaken()
    {
        return (wicketsTaken);
    }
    int CricketPlayer::getCatchesTaken()
    {
        return(catchesTaken);
    }

class FootballPlayer:public SlumsMember
{
 protected: 
    int goalsScored;
    int assists;
    int interceptions;
 public:

    FootballPlayer(int rNo,string n,double theGpa,char typ,int theGoalsScored,int theAssists,int theInterceptions);
    int getGoalsScored();
    int getAssists();
    int getInterceptions();

};

   FootballPlayer::FootballPlayer(int rNo,string n,double theGpa,char typ,int theGoalsScored,int theAssists,int theInterceptions):
                    SlumsMember(rNo,n,theGpa,typ)
                    {
                            goalsScored=theGoalsScored;
                            assists=theAssists;
                            interceptions=theInterceptions;
                    }

    int FootballPlayer::getGoalsScored()
    {
            return(goalsScored);

    }
    int FootballPlayer::getAssists()
    {
        return(assists);

    }
    int FootballPlayer::getInterceptions()
    {
            return(interceptions);
    }
在这里,我使用vector将对象存储在vector中

int main(){

向量成员;
贫民窟成员*贫民窟成员;
slumsMember=新球员(rNo、姓名、gpa、ch、a、b、c);
slumsMember=新板球运动员(rNo、姓名、gpa、ch、a、b、c);
成员。推回(*贫民窟成员);
贫民窟成员*mbr;

对于(inti=0;i我稍微清理了一下您的代码

class SlumsMember
{
尝试以下操作…使基类中的getWicketsTaken函数为虚拟函数

public:
   virtual int getWicketsTaken();

   int rollNumber;
   string name;
   double gpa;
   char type;
};



class CricketPlayer:public SlumsMember
{
public:
重写有助于防止类型重载

   int getWicketsTaken() override;

   int runsScored;
   int wicketsTaken;
   int catchesTaken;
};



class FootballPlayer: public SlumsMember
{
Then you can override the getWicketsTaken in this class too

int getWicketsTaken() override;

public: 
   int goalsScored;
   int assists;
   int interceptions;
};

int main() {
   vector<SlumsMember*> members;

我甚至尝试过通过成员[I]->getType()进行访问同样,但什么也没发生。但是你读了答案的其余部分吗?如果我的答案中有任何不清楚的地方,请随时提问。请注意,我更改了向量成员;改为向量成员;为什么我无法检索派生类的成员,例如使用mbr->getWicketsTaken()检索板球运动员的成员它是我的CricketPlayer派生类的getter。getter是公共的还是protectedgetter是公共的,但成员受保护
   int getWicketsTaken() override;

   int runsScored;
   int wicketsTaken;
   int catchesTaken;
};



class FootballPlayer: public SlumsMember
{
Then you can override the getWicketsTaken in this class too

int getWicketsTaken() override;

public: 
   int goalsScored;
   int assists;
   int interceptions;
};

int main() {
   vector<SlumsMember*> members;
   members.push_back(new FootballPlayer(rNo,name,gpa,ch,a,b,c));
   members.push_back(new CricketPlayer(rNo,name,gpa,ch,a,b,c));

   SlumsMember *mbr;
   for(int i=0;i<members.size();i++)
   {
      mbr=members[i];
      //How to make sure to which base class an object retrieved belongs to and how to access it.
      int rollNumber = mbr->rollNumber;
      double gpa = mbr->gpa;
      }

   return 0;
}