C++ C++;将值从一个类传递到抽象类
假设我想创建一个测验程序。我有一个抽象类问题和一个名为QuestionMC的子类。然后我有一个类player,它将从用户那里获取玩家信息,比如玩家名称和文件名(对于fstream)。如何将信息从类播放器(文件名和播放器名)传递到类问题C++ C++;将值从一个类传递到抽象类,c++,class,oop,inheritance,abstract-class,C++,Class,Oop,Inheritance,Abstract Class,假设我想创建一个测验程序。我有一个抽象类问题和一个名为QuestionMC的子类。然后我有一个类player,它将从用户那里获取玩家信息,比如玩家名称和文件名(对于fstream)。如何将信息从类播放器(文件名和播放器名)传递到类问题 class Question { public: virtual void showQuestion()=0; protected: string filename; string question;
class Question
{
public:
virtual void showQuestion()=0;
protected:
string filename;
string question;
string answer;
string questionType;
};
class Player
{
public:
Player(int score=0):score(score){}
void askdetails();
string getfilename();
string filename;
protected:
string fname;
string lname;
};
class QuestionMC:public Question
{
public:
void showQuestion();
void setfilename();
protected:
string mcQuestion;
string mcfilename;
};
int main()
{
Player p;
p.askdetails();
p.getfilename();
QuestionMC mc;
mc.setfilename(p.filename);
}
void Player::askdetails()
{
string filename,fname,lname;
cout << "Please enter your First name : ";
cin >> fname;
cout << "Please enter your last name : " ;
cin >> lname;
cout << "Please enter the filename your quiz is stored : " ;
cin >> filename;
ifstream infile;
infile.open(filename.c_str());
if (infile.fail())
{
cout << "Error Opening file, either file does not exist or invalid filename "<<endl;
exit(1);
}
this->fname=fname;
this->lname=lname;
this->filename=filename;
ofstream outfile;
outfile.open("Score.txt");
outfile << "Player name and score : " << fname <<" "<< lname << " "<< score<<endl ;
outfile.close();
}
string Player::getfilename()
{
return filename;
}
void QuestionMC::setfilename(filename)
{
mcfilename=filename;
}
课堂提问
{
公众:
虚拟void showQuestion()=0;
受保护的:
字符串文件名;
字符串问题;
字符串回答;
字符串类型;
};
职业选手
{
公众:
玩家(整数分数=0):分数(分数){}
无效askdetails();
字符串getfilename();
字符串文件名;
受保护的:
字符串fname;
字符串名称;
};
课堂提问MC:公共问题
{
公众:
无效显示问题();
void setfilename();
受保护的:
字符串问题;
字符串mcfilename;
};
int main()
{
玩家p;
p、 askdetails();
p、 getfilename();
问题mc-mc;
mc.setfilename(p.filename);
}
void播放器::askdetails()
{
字符串文件名,fname,lname;
cout>fname;
cout>lname;
cout>文件名;
河流充填;
open(filename.c_str());
if(infle.fail())
{
cout filename=文件名;
出流孔的直径;
outfile.open(“Score.txt”);
outfile只要classQuestionMC
是从classQuestionMC
派生出来的,那么public
和protected
的所有成员都会在QuestionMC
中继承
要设置类Question
的filename
,然后将其设置为QuestionMC
的成员,请将其添加到
void QuestionMC::setfilename(filename)
{
this->filename = filename;
mcfilename = filename;
}
它只起作用了一个问题:继承的目的是什么?只要成员文件名在基类中,为什么要在派生类中再次声明它??我的解决方案是创建第三个类,它存储指向所用一切的指针-
在您的情况下,它将存储:
指向类播放器的指针
指向类问题的指针,或者如果它是后来创建的,则指向包含所有问题指针的向量
然后,您将该类的指针添加为这两个类(Player和Question)的成员,这将使它们能够相互访问
该类将是一个全局变量,在程序结束之前不应删除(否则,每当试图访问其他类时,它将崩溃).请看一看.Scott Meyers’s’s特别有趣。您可以直接访问父类数据成员,具体取决于父变量的访问设置和继承访问。不,您知道我想将值从一个类(不继承)传递到另一个类