类多继承及包含练习(c++primer plus)
2009-11-25 22:07
323 查看
自己做的练习题,欢迎大家帮忙找错误,指点《c++ primer plus 》p534的第一题:(后面还有一个头文件,是供练习2使用的)
类的定义与方法实现(wine.h)
主函数,测试只用,winemain.cpp
另一个的winec.h(在使用这个头文件的时候,请将测试函数里的头文件包含改yi下)
欢迎一起交流: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
类的定义与方法实现(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
相关文章推荐
- 多继承练习(MI)《c++ primer plus》 p536-5
- C++ Primer Plus (第六版)第六章编程练习参考答案
- c++ primer plus 第六章变成练习 第2题
- C++primer plus 编程练习10.10
- 【学习C++】C++ Primer Plus (第六版)第八章编程练习1-7
- C++ Primer Plus 编程练习 第二章
- C++ Primer Plus编程练习 7.13-1
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第6章编程练习7
- C++primer plus第六版课后编程练习答案5.5
- 编程菜鸟的日记-初学尝试编程-C++ Primer Plus 第6章编程练习9
- C++primer plus第六版课后编程练习答案6.4
- C++ Primer Plus 第6版 中文版 第6章编程练习
- C++ Primer Plus 第五版 第七章 编程练习 5 6
- C++ Primer Plus (第6版)编程练习 代码-----第八章
- C++ Primer Plus第六版编程练习11.4解答
- C++primer plus第六版课后编程练习答案8.5
- 抽象类练习(c++ primer plus)
- C++primer plus第六版课后编程练习答案10.2
- C++primer plus第六版课后编程练习答案10.8
- C++primer plus第六版课后编程练习答案11.2