64,682
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
#include <iostream>
#include <valarray>
#include <string>
#include <cstring>
using namespace std;
template <typename T1, typename T2>
class Pair
{
private:
T1 a;
T2 b;
public:
T1 first() { return a; }
T2 second() { return b; }
Pair (const T1 & t1, const T2 & t2) : a (t1), b (t2) { }
Pair () { }
};
class Wine
{
private:
typedef valarray<int> ArrayInt;
typedef Pair<ArrayInt, ArrayInt> PairArray;
string label;
int year;
PairArray pa;
public:
Wine (const char * l, int y, const int yr[], const int bot[])
: label (l), year (y), pa(ArrayInt(yr, year), ArrayInt(bot, year)) { }
Wine (const char * l, int y) : label (l), year (y) { }
void GetBottles();
string & Label() { return label; }
int Sum();
void Show();
};
void Wine::GetBottles()
{
cout << "Enter " << label << " data for " << year << " year(s):\n";
for (int i = 0; i < year; i++)
{
cout << "Enter year: ";
cin >> pa.first()[i];
cout << "Enter bottles for that year: ";
cin >> pa.first()[i];
}
}
void Wine::Show()
{
cout << "Wine: " << label << endl;
cout.width(4);
cout << "Year";
cout << " ";
cout.width(7);
cout << "Bottles" << endl;
for (int i = 0; i < year; i++)
{
cout.width(4);
cout << pa.first()[i];
cout << " ";
cout.width(7);
cout << pa.second()[i];
}
}
int Wine::Sum()
{
int sum = 0;
for (int i = 0; i < year; i++)
{
sum += pa.first()[i];
}
return sum;
}
int main()
{
cout << "Enter name of wine: ";
char lab[50];
cin.getline(lab, 50);
cout << "Enter number of years: ";
int yrs;
cin >> yrs;
Wine holding(lab, yrs); //stors label, years, give arrays yrs elements
holding.GetBottles();
holding.Show();
const int YRS = 3;
int y[YRS] = {1993, 1995, 1998};
int b[YRS] = {48, 60, 72};
//create new object, initialize using data in array;s ;y and b
Wine more("Gushing Grzpe Red", YRS, y, b);
more.Show();
cout << "Total bottles for " << more.Label() //use Label() method
<< ": " << more.Sum() << endl; //use sum() method
cout << "Bye\n";
return 0;
}
char lab[50] = {0}; // 初始化下
cin.getline(lab, 50-1); // 至少留一个要给字符串结束符 \0