C++11 C++;在向量中存储基类指针的多态性
我有一个基类和两个派生类。我使用基类的指针将派生类对象存储在向量中。现在我必须打印存储在vector中的数据 如何从向量中检索对象 如何确保检索到的对象属于哪个派生类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
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;
}