#ifndef PAIRS_H
#define PAIRS_H #include <iostream>
#include <valarray> 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 Set_Pair(const T1 & aval,const T2 & bval);
void Show(int ys);
int Sum(void);
}; template <class T1,class T2>
T1 & Pair<T1,T2>::first()
{
return a;
} template <class T1,class T2>
T2 & Pair<T1,T2>::second()
{
return b;
} template <class T1,class T2>
void Pair<T1,T2>::Set_Pair(const T1 & aval,const T2 & bval)
{
a=aval;
b=bval; } template <class T1,class T2>
void Pair<T1,T2>::Show(int ys)
{
int i=;
for (;i<ys;i++)
{
cout <<"\t "<<a[i]<<"\t"<<b[i] <<endl;
} } template <class T1,class T2>
int Pair<T1,T2>::Sum(void)
{
return b.sum();
}
#endif
#ifndef WINE_H
#define WINE_H #include <string>
#include "pairs.h"
#include <valarray>
using namespace std; class wine
{
typedef valarray<int> ArrayInt;
typedef Pair<ArrayInt,ArrayInt> PairArray;
private:
string name;
PairArray year_bottles;
int years;
public:
wine(){}
wine(const char *l,int y,const int yr[],const int bot[]);
wine(const char *l,int y);
void GetBottles(void);
void Show(void);
int sum(void);
string Label(void){return name;}
};
#endif
#include"wine.h"
#include"pairs.h"
#include<iostream>
//#include <stdlib>
#include<string> using namespace std; wine::wine(const char *l,int y,const int yr[],const int bot[])
{
name=*l;
years=y;
year_bottles.Set_Pair(ArrayInt(yr,y),ArrayInt(bot,y));
}
wine::wine(const char *l,int y)
{
name=*l;
years=y;
}
void wine::GetBottles(void)
{
int i=;
ArrayInt year(years),bottle(years);
cout << "Enter "<< name <<"data for "<<years <<" year(s):" <<endl;
for(;i<years;i++)
{
cout << "Enter year: ";
cin >>year[i];
//cout << endl;
cout << "Enter bottles for that year: ";
cin >>bottle[i];
//cout << endl;
}
year_bottles.Set_Pair(year,bottle);
}
void wine::Show(void)
{ cout << "wine: "<< name <<endl;
cout <<"\t Year\t Bottles" <<endl;
year_bottles.Show(years); } int wine::sum(void)
{
int s=;
s=year_bottles.Sum();
return s;
}
#include "wine.h"
#include <iostream> using namespace std; int main(void)
{
cout << "Enter name of wine: ";
char lab[];
cin.getline(lab,);
cin.sync();
cout << "Enter number of years: ";
int yrs;
cin >> yrs; wine holding(lab,yrs);
holding.GetBottles();
holding.Show(); const int YRS=;
int y[YRS]={,,};
int b[YRS]={,,}; wine more("Gushing Grape Red",YRS,y,b);
more.Show();
cout << "Total bottles for " <<more.Label()
<< ": " <<more.sum() <<endl;
cout <<"Bey\n";
return ;
}

wine类包含string和Pair两个类,前者用于存储酒名,后者有2个valarray<int>对象,分别用于存储酿造年份和该年的瓶数。

C++代码重用——包含的更多相关文章

  1. “前.NET Core时代”如何实现跨平台代码重用 ——程序集重用

    除了在源代码层面实现共享("前.NET Core时代"如何实现跨平台代码重用 --源文件重用)之外,我们还可以跨平台共享同一个程序集,这种独立于具体平台的"中性" ...

  2. PHP代码重用与函数编写

    代码重用与函数编写 1.使用require()和include()函数 这两个函数的作用是将一个文件爱你载入到PHP脚本中,这样就可以直接调用这个文件中的方法.require()和include()几 ...

  3. 从零开始攻略PHP(6)——代码重用与函数编写的一些注意事项

    一个新的项目是这样创建的:它将已有的可重新利用的组件进行组合,并将新的开发难度降低到最小. 代码重用的好处:降低成本.提升可靠性和一致性. 1.使用require()和include()函数 使用一条 ...

  4. [置顶] Android项目组织和代码重用

    在Android应用开发过程中,只要涉及两个或以上人的开发,就需要考虑分工和代码的组织和重用问题. 代码重用有三种方式: 1.APK: 2.JAR:通过Libs/ 和Build path集成,缺点是不 ...

  5. 52. 模版和设计元素——Lotus Notes的代码重用

    不论是理论上还是实用上,代码重用都是编程的一个重要议题.可以从两个角度来讨论代码重用. 一是逻辑上代码以怎样的方式被重用.既可以通过面向对象的思想普及以来耳熟能详的继承的方式.比如先建了一个车的基类, ...

  6. Java 代码重用:操作与上下文重用

    目录 操作重用 参数化操作 上下文重用 上下文作为模板方法 结束语 我几乎不需要讨论为什么重用代码是有利的.代码重用(通常)会导致更快的开发与更少的 BUG.一旦一段代码被封装和重用,那么检查程序是否 ...

  7. php学习----错误处理和代码重用

    php错误处理 一.错误分类:1.语法错误 2.运行时错误 3.逻辑错误 错误代号(部分): 所有看到的错误代码在php中都被定义为系统常量(可以直接使用) 1)系统错误 E_PARSE:编译错误,代 ...

  8. 《C++ Primer Plus》读书笔记之十二—C++中的代码重用

    第14章 C++中的代码重用 1.C++代码重用方法:公有继承.使用本身是另一个类的对象的类成员(这种方法称为包含.组合或层次化).私有或保护继承.类模板等. 2.模板特性意味着声明对象时,必须指定具 ...

  9. C++_代码重用1-总览

    C++的主要目的是促进代码重用. 公有继承是实现这一目标的机制之一: 本身是另一个类的成员,这种方法称为包含.组合.层次化. 另一种方法是使用私有.保护继承. 通常包含.私有继承和保护继承用于实现ha ...

随机推荐

  1. Eclipse-将svn上的项目转化成相应的项目

    这里假设svn上的项目为maven项目 首先从svn检出项目 其中项目名称code可自己定义更改新的名称 从svn检出的项目结构 然后将项目转化成相关的项目 转换加载中 加载/下载 maven相关内容 ...

  2. Yii2提示信息设置方法

    显示信息提示用户时,可以用setFlash,hasFlash,getFlash function actionOk() { Yii::app()->user->setFlash('succ ...

  3. Fedora21下安装cuda7.5

    Fedora21装cuda7.5 首先制作启动U盘.装好fedora21后别做任何update等yum和rpm操作,按照下面步骤走. 其中遇到用UEFI模式安装cuda时,系统一定要求提供公钥和私钥, ...

  4. NOIP2005提高组 过河

    题目描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数 ...

  5. Erlang练习-UDP

    贴一下代码,例子是从别人那里直接抄来的: -module(myudp). -export([start/0, client/1]). %% Server start() -> spawn(fun ...

  6. ActivityInfo taskAffinity

    通常在Manifest里面使用 <application android:icon="@drawable/icon" android:label="@string/ ...

  7. html5+ 获取当前设备的加速度信息

    getCurrentAcceleration 获取当前设备的加速度信息 void plus.accelerometer.getCurrentAcceleration( successCB, error ...

  8. tp框架表单验证

    之前的表单验证都是用js写的,这里也可以使用tp框架的验证.但是两者比较而言还是js验证比较好,因为tp框架验证会运行后台代码,这样运行速度和效率就会下降. 自动验证是ThinkPHP模型层提供的一种 ...

  9. Cocoa的MVC架构分析 cocoa的mvc实现

    Cocoa是Mac OS和iPhone OS上的开发框架,使用Objective-C做为开发语言.当然,在代码中也可以嵌入C和C++的语句.初识Objective-C时会觉得它的语法很奇怪,但本质上和 ...

  10. 我的css释疑-float line-height inline-block vertical-align

    markdown的图片和链接格式相类似: [链接文字/图片的alt text] (链接地址/ 图片的地址), 只是图片要在前面加上感叹号! 当内容中含有图片的时候,如果图片的高度大于行高,则含有图片 ...