C++ C++;将值从一个类传递到抽象类

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;

假设我想创建一个测验程序。我有一个抽象类问题和一个名为QuestionMC的子类。然后我有一个类player,它将从用户那里获取玩家信息,比如玩家名称和文件名(对于fstream)。如何将信息从类播放器(文件名和播放器名)传递到类问题

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只要class
QuestionMC
是从class
QuestionMC
派生出来的,那么
public
protected
的所有
成员都会在
QuestionMC
中继承

要设置类
Question
filename
,然后将其设置为
QuestionMC
的成员,请将其添加到

void QuestionMC::setfilename(filename)
{
    this->filename = filename;
    mcfilename = filename;
}

它只起作用了一个问题:继承的目的是什么?只要成员
文件名
在基类中,为什么要在派生类中再次声明它??

我的解决方案是创建第三个类,它存储指向所用一切的指针- 在您的情况下,它将存储:

指向类播放器的指针

指向类问题的指针,或者如果它是后来创建的,则指向包含所有问题指针的向量

然后,您将该类的指针添加为这两个类(Player和Question)的成员,这将使它们能够相互访问


该类将是一个全局变量,在程序结束之前不应删除(否则,每当试图访问其他类时,它将崩溃).

请看一看.Scott Meyers’s’s特别有趣。您可以直接访问父类数据成员,具体取决于父变量的访问设置和继承访问。不,您知道我想将值从一个类(不继承)传递到另一个类