您的位置:首页 > 编程语言 > C语言/C++

类多继承及包含练习(c++primer plus)

2009-11-25 22:07 323 查看
自己做的练习题,欢迎大家帮忙找错误,指点《c++ primer plus 》p534的第一题:(后面还有一个头文件,是供练习2使用的)

类的定义与方法实现(wine.h)

//////filename:	    wine.h
//////date:	    2009-11-25
//////author:	    keepingdo
#pragma once
#ifndef WINE_H_
#define WINE_H_

#include<string>
#include<valarray>
#include<iostream>

namespace kp{

using std::string;
using std::valarray;
using std::endl;
using std::cout;
using std::cin;
//////////////////////////////class Wine/////////////////
class Wine{
private:
string _name;
//int _size;
valarray<int>  _years;
valarray<int>  _bottles;
public:
inline Wine():_name("null"),_years(0),_bottles(0){}
Wine(const char *name ,int size,const int *years,const int *bottles);
Wine(const char *name,int size);
//~Wine();
inline string name()const{return _name;}
void getbottles();
int sum();
void show()const;
};
////////////////////////////////methods////////////////////////////////////////////////
Wine::Wine(const char *name, int size,
const int *years, const int *bottles):_name(name),_years(years,size),_bottles(bottles,size){}
Wine::Wine(const char *name, int size):_name(name),_years(size),_bottles(size){}
void Wine::getbottles()		//get the year's bottles
{
int i=0;
cout<<"enter  "<<_name<<" data for "<<_years.size()<<" year(s):/n";
while(i<_years.size())
{
cout<<"enter year: ";
cin>>_years[i];
cout<<"enter bottles for that year: ";
cin>>_bottles[i];
i++;
}
cout<<endl;
}
int Wine::sum()	    //return total of the wine bottles
{
int total=0;
for (int i=0;i<_years.size();i++)
total+=_bottles[i];
return total;
}
void Wine::show()const	//show wine info
{
cout<<"Wine: "<<_name<<endl;
cout.fill(' ');
cout.width(4);
cout<<" "<<"year";
cout.width(4);
cout<<" "<<"bottles"<<endl;
for (int i=0;i<_years.size();i++)
{
cout.width(4);
cout<<" ";
cout.width(4);
cout<<_years[i];
cout.width(4);
cout<<" ";
cout.width(4);
cout<<_bottles[i]<<endl;
}
}
}//namespace kp;
#endif		//#ifndef WINE_H_


主函数,测试只用,winemain.cpp

//filename:	winemain.cpp
//date:		2009-11-25
//author:	keepingdo

#include<iostream>
#include"wine.h"

int main(int argv,char **argc)
{
using std::cout;
using std::cin;
using std::endl;
using kp::Wine;

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);
holding.getbottles();
holding.show();
cout<<endl;

const int ys=3;
int y[ys]={1993,1995,1998};
int b[ys]={48,60,72};
Wine more("red wine",ys,y,b);
more.show();
cout<<"the total for "<<more.name()<<":"<<more.sum()<<endl;
cout<<endl<<"bye!/n";

return 0;
}


另一个的winec.h(在使用这个头文件的时候,请将测试函数里的头文件包含改yi下)

//filename:	winec.h
//date:		2009-11-25
//author:	xhl

#pragma once
#ifndef WINEC_H_
#define WINEC_H_

#include<iostream>
#include<string>
#include<valarray>

namespace kp{

using std::cout;
using std::endl;
using std::cin;
using std::string;
using std::valarray;

//////////////////////////template class Pair///////////////////////////
template <typename T1,typename  T2>
class  Pair{
private:
T1 a;
T2 b;
public:
T1 &first(){return a;}
T2 &second(){ return b;}
T1 first()const{return a;}
T2 second()const{return b;}
Pair &operator=(Pair &ar);
Pair(const T1 &first,const T2 &second):a(first),b(second){}
Pair(){}
};
///////////////////////////////class Wine///////////////////////////
class Wine:private string,private Pair<valarray<int>,valarray<int>>{
private:
typedef Pair<valarray<int>,valarray<int>> PairArray;
//int _size;
public:
inline Wine():string("null"),PairArray(){}
inline Wine(const char *name,int size,const int *years,const int * bottles):string(name),
PairArray(valarray<int>(years,size),valarray<int>(bottles,size)){}
inline Wine(const char *name,int size):string(name),
PairArray(valarray<int>(size),valarray<int>(size)) {}
int size()const;
void getbottles();
string name ()const;
int sum()const;
void show()const;
};
///////////////////////tempalte class Pair methods ////////////////////////
template <typename T1,typename T2>
Pair<T1,T2>& Pair<T1,T2>::operator =(Pair<T1,T2> &ar)
{
a=ar.a;
b=ar.b;
return *this;
}
/////////////////////////////class Wine methods/////////////////////////////
string Wine::name()const
{
return (const string &)(*this);
}
int Wine::size()const
{
valarray<int> temp=PairArray::first();
return temp.size();
}
int Wine::sum()const
{
valarray<int> temp=PairArray::second();
return temp.sum();
}
void Wine::getbottles()
{
valarray<int> years=PairArray::first();
valarray<int> bottles=PairArray::second();
int i;
for (i=0;i<size();i++)
{
cout<<"enter year: ";
cin>>years[i];
cout<<"enter bottles for that year: ";
cin>>bottles[i];
}
PairArray::operator =(PairArray(years,bottles));
}
void Wine::show()const
{
cout<<"Wine: "<<(const string & )(*this)<<endl;
cout.fill(' ');
cout.width(4);
valarray<int> year=PairArray::first();
valarray<int> bottles=PairArray::second();
for (int i=0;i<size();i++)
{
cout.width(4);
cout<<year[i];
cout.width(4);
cout<<bottles[i]<<endl;
}
cout<<endl;
}
}	//namespace kp;
#endif


欢迎一起交流:xhl_hylo@foxmail.com

百度空间(Someone海螺):http://hi.baidu.com/hailuojj

新浪blog(Someone海螺):http://blog.sina.com.cn/hylo

csdn博客(keepingdo):http://hi.csdn.net/keepingdo
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: