《C++ Primer Plus》14章编程练习1、2

原创 2012年03月25日 14:55:18

        就当练下手吧。后面的题不是太长就是太烦,不做了。

//Create a class by using the technique of composition
//Charpter 14,Programming Exercise 01
//File name: ch14-1.h
#ifndef _WINE_
#define _WINE_
#include <string>
#include <valarray>

using std::string; 
using std::valarray;

template <typename T1, typename T2>
class Pair
{
private:
    T1 a;
    T2 b;
public:
    Pair() {}
    Pair(const T1& aV, const T2& bV): a(aV), b(bV) {}
    const T1& getFirst() const {return a; }
    const T2& getSecond() const {return b; }
    T1& setFirst() {return a; }
    T2& setSecond(){return b; }
};

class Wine
{
private:
    typedef valarray<int> intArray;
    typedef Pair<intArray,intArray> PairArray;
    string label;       //reference to wine name
    PairArray WineInfo; //producted year and number of bottles
    int years;          //number of years
public:
    Wine() {}
    Wine(const char* l, int y, const int yr[], const int bot[]);
    Wine(const char* l, int y);
    void GetBottles();
    const string& Label() const {return label; }
    int sum () const;   
    void Show() const;
};
#endif
#include <iostream>
#include "ch14-1.h"

using std::cout; using std::endl;
using std::cin;  using std::left;

Wine::Wine(const char* l, int y, const int yr[], const int bot[])
    : label(l),years(y)
{
    WineInfo.setFirst().resize(y);
    WineInfo.setSecond().resize(y);
    for(int i = 0; i< y; i++)
    {
        WineInfo.setFirst()[i] = yr[i];
        WineInfo.setSecond()[i] = bot[i];
    }
}

Wine::Wine(const char* l, int y): label(l),years(y)
{
    WineInfo.setFirst().resize(y);
    WineInfo.setSecond().resize(y);
}

void Wine::GetBottles()
{
    cout << "Enter " << label << " data for " << years << " year(s)\n";
    for(int i = 0; i< years; i++)
    {
        cout << "Enter year: "; 
        cin >> WineInfo.setFirst()[i];
        cout << "Enter Bottles for that year: ";
        cin >> WineInfo.setSecond()[i];
    }
}

int Wine::sum() const
{
    return WineInfo.getSecond().sum();
}

void Wine::Show() const
{
    cout << "Wine: " << label << endl;
    cout << "   Year    Bottles\n";
    for(int i = 0; i< years; i++)
    {
        cout << "   ";
        cout.width(8);
        cout << left << WineInfo.getFirst()[i];
        cout << left << WineInfo.getSecond()[i] << endl;
    }
}

-------------------------Programming-Exercise-2----------------------------
//Create a class by using the technique of private inheritance
//Charpter 14,Programming Exercise 02
//File name: ch14-2.h
#ifndef _WINE_
#define _WINE_
#include <string>
#include <valarray>

using std::string; 
using std::valarray;

template <typename T1, typename T2>
class Pair
{
private:
    T1 a;
    T2 b;
public:
    Pair() {}
    Pair(const T1& aV, const T2& bV): a(aV), b(bV) {}
    const T1& getFirst() const {return a; }
    const T2& getSecond() const {return b; }
    T1& setFirst() {return a; }
    T2& setSecond(){return b; }
};

typedef valarray<int> intArray;
typedef Pair<intArray,intArray> PairArray;

class Wine: private PairArray,private string
{
public:
    Wine() {}
    Wine(const char* l, int y, const int yr[], const int bot[]);
    Wine(const char* l, int y);
    void GetBottles();
    const string& Label() const {return (const string&)*this; }
    int sum () const;   
    void Show() const;
};
#endif
#include <iostream>
#include "ch14-2.h"

using std::cout; using std::endl;
using std::cin;  using std::left;

Wine::Wine(const char* l, int y, const int yr[], const int bot[])
    : string(l)
{
    PairArray::setFirst() = intArray(yr,y);
    PairArray::setSecond() = intArray(bot,y);
}

Wine::Wine(const char* l, int y) :string(l)
{
   PairArray::setFirst() = intArray(y);
   PairArray::setSecond() = intArray(y);
}

void Wine::GetBottles()
{
    int years = PairArray::getFirst().size();
    cout << "Enter " << (const string&)*this << " data for " 
        << years << " year(s)\n";
    for(int i = 0; i< years; i++)
    {
        cout << "Enter year: "; 
        cin >> ((PairArray*)this)->setFirst()[i];
        cout << "Enter Bottles for that year: ";
        cin >> ((PairArray*)this)->setSecond()[i];
    }
}

int Wine::sum() const
{
    return ((PairArray*)this)->getSecond().sum();
}

void Wine::Show() const
{
    int years = PairArray::getFirst().size();
    cout << "Wine: " << (const string&)*this << endl;
    cout << "   Year    Bottles\n";
    for(int i = 0; i< years; i++)
    {
        cout << "   ";
        cout.width(8);
        cout << left << ((PairArray const*)this)->getFirst()[i];
        cout << left << ((PairArray const*)this)->getSecond()[i] << endl;
    }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++ Primer Plus 第六版_编程练习(2)(Chapter_three 1-7)

编程工具用得好,搞起研究事半功倍。导师的意见是,学好C++,其他编程都不怕。暂时没有迫切的实战需要,于是决定从最基础的学起,挑了《C++ Primer Plus (第六版)》这本书,开始啃吧。编程练习...

《C++ Primer Plus(第六版)》(41)(第十七章 输入、输出和文件 编程练习和答案1)

17.8 编程练习 1.编写一个程序计算输入流中第一个$之前的字符数目,并将$留在输入流中。 // // main.cpp // HelloWorld // // Creat...

C++ Primer Plus 第六版_编程练习(4)(Chapter_five 1-5)

编程工具用得好,搞起研究事半功倍。导师的意见是,学好C++,其他编程都不怕。暂时没有迫切的实战需要,于是决定从最基础的学起,挑了《C++ Primer Plus (第六版)》这本书,开始啃吧。编程练习...

《C++ Primer Plus》——编程练习答案(1)

第二章 学习这本书顺便写的,有错请大家指正。2.7.1编写一个c++程序,显示您的姓名和地址。//显示姓名和地址 #include int main() { using name...

C++ Primer Plus 第六版_编程练习(3)(Chapter_four 1-10)

编程工具用得好,搞起研究事半功倍。导师的意见是,学好C++,其他编程都不怕。暂时没有迫切的实战需要,于是决定从最基础的学起,挑了《C++ Primer Plus (第六版)》这本书,开始啃吧。编程练习...

C++ primer plus(sixth edition) 编程练习答案(answers for programing exercises)第九章(chapter 9) 1-4

重拾c++,不知道自己为什么莫名奇妙好久没学,好吧,现在只能抓紧时间慢慢拾起来了,希望这学期之后具有初步的编程能力。现在已经都忘了,时间也不容许自己再浪费了,马上就要毕业了。。。好怕以后。9.1//g...

C++ primer plus(sixth edition) 编程练习答案(answers for programing exercises)第八章(chapter 8) 1-4

8.1 #include void silly(const char * s, int n = 0); int main(void) { using namespace std; ...

《C++ Primer Plus(第六版)》(42)(第十七章 输入、输出和文件 编程练习和答案2)

重点:文件读写,二进制文件读写, 题目好长,分多一张,二进制和普通的文件格式读写, 6.考虑14章的编程练习5中的类定义。如果还没有完成这个练习,请现在就做,然后完成下面的任务。 编写一个程序,它...

c++primer plus第七章编程练习的解答1-8

第一题 //caculate the harmonic average //program end until you enter zero #include using namespace st...

【学习C++】C++ Primer Plus (第六版)第十一章编程练习1-7

1. vector.h和vector.cpp见书 程序清单11.13,11.14 //main.cpp #include #include #include #include #include...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)