c++ 模板 代码填空(dump声明怎么写呢?
  • 板块题目总版
  • 楼主TheSkyFuker
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/5/10 17:32
  • 上次更新2024/5/10 20:10:21
查看原帖
c++ 模板 代码填空(dump声明怎么写呢?
1274996
TheSkyFuker楼主2024/5/10 17:32

请阅读框架代码并补充完善。

示例输入:

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);
			}
		}
	}
}


2024/5/10 17:32
加载中...