我有一个基类,然后有两个派生类。我使用基类的指针在Vector中存储派生类对象。现在我必须打印存储在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);
}
在这里,我使用向量将对象存储在向量中。
int main() {
vector<SlumsMember> members;
SlumsMember *slumsMember;
slumsMember=new FootballPlayer(rNo,name,gpa,ch,a,b,c);
slumsMember=new CricketPlayer(rNo,name,gpa,ch,a,b,c);
members.push_back(*slumsMember);
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.
}
return 0;
}
我清理了你的代码。。。
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;
请注意,在下一行,如果您给出的值不是贫民窟成员类型,您应该会收到编译器错误。
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;
}
C++ 类 & 对象 一个指向 C++ 类的指针与指向结构的指针类似,访问指向类的指针的成员,需要使用成员访问运算符 ->,就像访问指向结构的指针一样。与所有的指针一样,您必须在使用指针之前,对指针进行初始化。 下面的实例有助于更好地理解指向类的指针的概念: #include <iostream> using namespace std; class Box { public:
但我想使用一个指针,而不是一个简单的变量。能给我点启示吗? 谢谢
问题内容: 我是Java菜鸟。我已经掌握了将C / C ++指针转换为Java引用的概念,并且进展相当顺利。 我打了一段有指针的代码(即* ptr)。我需要取消引用指针并更改其指向的指针的值(即 ptr =&newthing;) 在Java中这似乎要困难得多。是否有人对如何解决此问题有任何想法?快速谷歌搜索什么都没有。 这是C ++中的代码示例。我想在Java中获得类似的工作,但是ptr_to_p
在print语句中:(假设整数大小为4字节) 让arr的内存位置为1000 arr 1——给出1016(即下一行内存) 我理解了逻辑,但我无法理解编译器如何将 arr标识为“指向4整数数组的指针”,并且 即使在增量之前两者都指向相同的地址(1000)
C++ 指针 指向指针的指针是一种多级间接寻址的形式,或者说是一个指针链。通常,一个指针包含一个变量的地址。当我们定义一个指向指针的指针时,第一个指针包含了第二个指针的地址,第二个指针指向包含实际值的位置。C++ 指针
对于下面的代码,当基类指针被分配给派生类时,我有关于多态性的问题。 当派生类的对象直接使用print函数时,输出是显而易见的。 当我使用基类指针并指向派生类的对象时,会使用基类的print函数,但输出的是派生对象的信息。有人能详细解释一下吗?谢谢!