C++ primer plus第六版课后编程题答案14.1


 

 

Pair.cpp

#include <iostream>
using namespace std;
//p580
template <class T1,class T2>
class Pair{
private:
	T1 a;
	T2 b;
public:
	void setFirst(const T1 &t1)
	{
		a=t1;
	}
	void setSecond(const T2 &t2)
	{
		b=t2;
	}
	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(){};
};
template <class T1,class T2>
T1 &Pair<T1,T2>::first()
{
	return a;
}
template <class T1,class T2>
T2 &Pair<T1,T2>::second()
{
	return b;
}

Wine.cpp

#include <iostream>
//#include <vector>
#include <valarray>
#include <string>
#include "Pair.cpp"
using namespace std;
typedef valarray<int> ArrayInt;
typedef Pair<ArrayInt,ArrayInt> PairArray;
class Wine{
private:
	string label;
	PairArray pa;
	int yearNum;//永远存储年数,即一共有几种年份的
public:
	Wine(const string l,int y,const int yr[],int bot[])
	{
		label=l;
		//int leny=sizeof(yr);//先获取长度
		//int lenb=sizeof(bot);
		//yearNum=leny;//yr[]数组中存放的是年份
		yearNum=y;//已经指明了长度
		ArrayInt f(yr,y);//构造valarray<int>数组
		ArrayInt b(bot,y);
		pa.setFirst(f);
		pa.setSecond(b);
	}
	Wine(const string l,int y)
	{
		label=l;
		pa.setFirst(ArrayInt(y));
		pa.setSecond(ArrayInt(y));
		yearNum=y;
	}
	void GetBottles()
	{
		int len=yearNum;
		int i=0;
		while(i<len)
		{
			cout<<"Enter year:";
			cin>>pa.first()[i];//这个表达式是不是很奇怪?
							//pa.first()返回的是a,而a的类型是valarry,这个就不奇怪了吧,哈哈
			cin.get();//记得吃掉这个回车;
			cout<<"Enter bottles for that year:";
			cin>>pa.second()[i];
			cin.get();
			i++;
		}
	}

	string &Label()
	{
		return label;
	}
	int sum()
	{
		return pa.second().sum();
	}
	void show()
	{
		int len=yearNum;
		int i=0;
		cout<<"Wine:"<<label<<endl;
		cout<<"     year        bottols"<<endl;
		for(;i<len;i++)
		{
			cout<<"     "<<pa.first()[i]<<"        "<<pa.second()[i]<<endl;
		}
	
	}


};

main141.cpp

#include <iostream>
#include "Wine.cpp"
using namespace std;
void main141()
{
	
	cout<<"Enter name of wine:";
	string lab;
	cin>>lab;
	//getline(cin,lab);//用getline,因为可能会有空格
	//cin.get();
	cout<<"Enter the number of years:";
	int yrs;
	cin>>yrs;
	Wine holding(lab,yrs);
	holding.GetBottles();
	holding.show();
	
	const int YRS=3;
	int y[YRS]={1993,1995,1998};
	int b[YRS]={48,60,72};

	Wine more("Gushagning Grap Red",YRS,y,b);
	more.show();
	cout<<"Total bottles for "<<more.Label()<<":"<<more.sum()<<endl;

	cout<<"Byes"<<endl;

	cin.get();
};

 

 


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注