请阅读框架代码并补充完善。
示例输入:
2 player int 333 string RedQueen winner double int 2.345 7 double 4.567
示例输出:
Player shuffles with 333, picks RedQueen Winner shuffles with 2.345 and 7, picks 4.567
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
template <typename T>
class Player
{
protected:
T data;
public:
Player(T &t) : data(t) {}
void shuffle() {}
virtual void picker(T &t)
{
cout << "Player shuffles with " << data << ", picks " << t << endl;
data = t;
}
friend void dump(Player<T> &player);
};
template <typename T1, typename T2>
class Winner : public Player<T1>
{
private:
T2 data2;
public:
Winner(T1 &t1, T2 &t2) : Player<T1>(t1), data2(t2) {}
void shuffle() {}
void picker(T1 &t)
{
cout << "Winner shuffles with " << this->data << " and " << data2 << ", picks " << t << endl;
this->data = t;
}
};
// put the declaration of "dump" below
// todo ____qcodep____
{
string tag;
player.shuffle();
cin >> tag;
if (tag == "string")
{
cin >> tag;
player.picker(tag);
}
else if (tag == "int")
{
int i32;
cin >> i32;
player.picker(i32);
}
else if (tag == "double")
{
double d64;
cin >> d64;
player.picker(d64);
}
}
int main()
{
int n;
string tag;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> tag;
if (tag == "player")
{
cin >> tag;
if (tag == "int")
{
int data1;
cin >> data1;
Player<int> player(data1);
dump(player);
}
else if (tag == "string")
{
string data1;
cin >> data1;
Player<string> player(data1);
dump(player);
}
else if (tag == "double")
{
double data1;
cin >> data1;
Player<double> player(data1);
dump(player);
}
}
else if (tag == "winner")
{
string tag2;
cin >> tag >> tag2;
if (tag == "int" && tag2 == "int")
{
int data1, data2;
cin >> data1 >> data2;
Winner<int, int> winner(data1, data2);
dump(winner);
}
else if (tag == "int" && tag2 == "string")
{
int data1;
string data2;
cin >> data1 >> data2;
Winner<decltype(data1), decltype(data2)> winner(data1, data2);
dump(winner);
}
else if (tag == "int" && tag2 == "double")
{
int data1;
double data2;
cin >> data1 >> data2;
Winner<decltype(data1), decltype(data2)> winner(data1, data2);
dump(winner);
}
else if (tag == "string" && tag2 == "string")
{
string data1;
string data2;
cin >> data1 >> data2;
Winner<decltype(data1), decltype(data2)> winner(data1, data2);
dump(winner);
}
else if (tag == "string" && tag2 == "int")
{
string data1;
int data2;
cin >> data1 >> data2;
Winner<decltype(data1), decltype(data2)> winner(data1, data2);
dump(winner);
}
else if (tag == "string" && tag2 == "double")
{
string data1;
double data2;
cin >> data1 >> data2;
Winner<decltype(data1), decltype(data2)> winner(data1, data2);
dump(winner);
}
else if (tag == "double" && tag2 == "double")
{
double data1;
double data2;
cin >> data1 >> data2;
Winner<decltype(data1), decltype(data2)> winner(data1, data2);
dump(winner);
}
else if (tag == "double" && tag2 == "string")
{
double data1;
string data2;
cin >> data1 >> data2;
Winner<decltype(data1), decltype(data2)> winner(data1, data2);
dump(winner);
}
else if (tag == "double" && tag2 == "int")
{
double data1;
int data2;
cin >> data1 >> data2;
Winner<decltype(data1), decltype(data2)> winner(data1, data2);
dump(winner);
}
}
}
}