阅读背景:

C++ primer plus 第14章习题

来源:互联网 
//第14章第1题
#ifndef WINE_H_
#define WINE_H_

#include<iostream>
#include<string>
#include<valarray>
//#include<utility>
using std::cin;
using std::cout;
using std::endl;
using std::string;
template <class T1,class T2>
class Pair
{
private:
	T1 a;
	T2 b;
public:
	T1 &first();
	T2 &second();//返回引用
	T1 first()const { return a; }
	T2 second()const { return b; }//直接返回
	Pair(const T1 &aval, const T2 &bval) :a(aval), b(bval){}//初始化
	Pair(){}
	void setFirst(const T1&t1)
	{
		a = t1;
	}
	void setSecond(const T2&t2)
	{
		b = t2;
	}
};
template<class T1,class T2>
T1 &Pair<T1, T2>::first()
{
	return a;
}
template<class T1, class T2>
T2 &Pair<T1, T2>::second()
{
	return b;
}
typedef std::valarray<int>ArrarInt;
typedef Pair<std::valarray<int>, std::valarray<int>>PairArray1;//最好用这个
//typedef std::pair<std::valarray<int>, std::valarray<int>>PairArray;
class Wine 
{
private:
	string name;
	PairArray1 pa;
	int wyr;
public:
	Wine(const char *l, int y, const int yr[], const int bot[])
	{
		name = l;//可以直接赋值
		wyr = y;
	/*	pa.first = yr;
		pa.second = bot;*///这个编译不通过,所以要换
		ArrarInt  f(yr, y);
		ArrarInt  b(bot, y);
		pa.setFirst(f);
		pa.setSecond(b);//不过也有人用make_pairs
		/*pa = std::make_pair(f, b);*///这个要用其他宏定义,
	}
	Wine(const char *l, int y)
	{
		name = l;
		wyr = y;
		pa.setFirst(ArrarInt(y));
		pa.setSecond(ArrarInt(y));
	}
	void GetBottles()
	{
		cout << "Please enter number of"<<wyr<<" yesrs:\n";
		for (int i = 0; i < wyr; i++)
		{
			cout << "Enter year:";
			cin >> pa.first()[i];//返回的是数组,可以这样写
			cin.get();//吃回车,不然就down
			cout << "Enter bottles for that year:";
			cin >> pa.second()[i];
			cin.get();//吃回车,不然就down
		}
	}
	int sum()
	{
		return pa.second().sum();//返回数组的sum方法
	}
	string & Label()
	{
		return name;
	}
	void Show()
	{
		cout << "Wine: " << name << endl;
		cout << "     " << "Year" << "   " << "Bottles" << endl;
		for (int i = 0; i < wyr; i++)
		{
			cout << "     " << pa.first()[i] << "   " << pa.second()[i] << endl;
		}

	}

};

#endif//第14章第1题
#ifndef WINE_H_
#define WINE_H_

#inc



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: