多继承练习(MI)《c++ primer plus》 p536-5
2009-11-27 22:20
344 查看
多继承练习(MI)《c++ primer plus》 p536上的第五题
还请各位高手指点一二哈
谢谢了
emp.h
测试文件emp.cpp
欢迎一起交流:xhl_hylo@foxmail.com
百度空间(Someone海螺):http://hi.baidu.com/hailuojj
csdn博客(keepingdo):http://hi.csdn.net/keepingdo
新浪blog(Someone海螺):http://blog.sina.com.cn/hylo
还请各位高手指点一二哈
谢谢了
emp.h
//filename: emp.h //date: 2009-11-27 //author: xhl #pragma once #ifndef EMP_H_ #define EMP_H_ #include<iostream> #include<string> namespace kp{ ////////////////////////abstract class abstr_emp///////////////////////////// class abstr_emp{ private: std::string fname; // first name std::string lname; //second name std::string job; public: abstr_emp(); abstr_emp(const std::string &fn,const std::string &ln,const std::string &j); virtual void showall()const; virtual void setall(); friend std::ostream &operator <<(std::ostream &os,const abstr_emp &e); // virtual ~abstr_emp()=0{}; }; /////////////////////////class employee :public abstr_emp////////////////////// class employee:public abstr_emp{ public: employee(); employee(const std::string &fn,const std::string &ln,const std::string &j); virtual void showall()const; virtual void setall(); }; //////////////////////class manager :virtual public abstr_emp///////////// class manager:virtual public abstr_emp{ private: int chargeof; protected: int inchargeof()const{return chargeof;} //output int &inchargeof(){ return chargeof;} //input public: manager(); manager(const std::string &fn,const std::string &ln,const std::string &j,int ico=0); manager(const abstr_emp &e,int ico); manager(const manager &m); void showall()const; void setall(); }; /////////////////////class fink:virtual public abstr_emp///////////////// class fink:virtual public abstr_emp{ private: std::string reto; //to whom fink reports; protected: const std::string reportsto()const {return reto;} std::string &reportsto(){return reto;} public: fink(); fink(const std::string &fn,const std::string &ln, const std::string &j,const std::string &re); fink(const abstr_emp &e,const std::string &re); fink(const fink &f); void showall()const; void setall(); }; /////////////class highfink :public manager,public fink/////////////// class highfink:public manager,public fink{ public: highfink(); highfink(const std::string &fn,const std::string &ln,const std::string &j, const std::string &re,int ico); highfink(const abstr_emp &e,const std::string &re,int ico); highfink(const fink &f,int ico); highfink(const manager &m,const std::string &re); highfink(const highfink &hf); void showall()const; void setall(); }; /////////////////////////////////////////////////////////////////////// //////////////////////////////methods//////////////////////////////// /////////////////////////class abstr_emp methods////////////////// abstr_emp::abstr_emp():fname("null"),lname("null"),job("no job"){}; abstr_emp::abstr_emp(const std::string &fn, const std::string &ln, const std::string &j):fname(fn),lname(ln),job(j){} void abstr_emp::showall()const { std::cout<<"fname: "<<fname<<std::endl; std::cout<<"lname: "<<lname<<std::endl; std::cout<<"job : "<<job<<std::endl; } void abstr_emp::setall() { std::cout<<"plz enter the /n"; std::cout<<"fname:"; std::cin>>fname; std::cout<<"lname:"; std::cin>>lname; std::cout<<"job :"; std::cin>>job; } //friend std::ostream &operator <<(std::ostream &os,const abstr_emp &e) { os<<"fname: "<<e.fname<<std::endl; os<<"lname: "<<e.lname<<std::endl; os<<"job : "<<e.job<<std::endl; return os; } ////////////////////class employee methods///////////////// employee::employee():abstr_emp(){} employee::employee(const std::string &fn, const std::string &ln, const std::string &j):abstr_emp(fn,ln,j){} void employee::showall()const { abstr_emp::showall(); } void employee::setall() { abstr_emp::setall(); } //////////////////class manager methods///////////////////// manager::manager():abstr_emp(),chargeof(0){} manager::manager(const std::string &fn, const std::string &ln, const std::string &j, int ico):abstr_emp(fn,ln,j) { chargeof=ico; } manager::manager(const abstr_emp &e,int ico):abstr_emp(e),chargeof(ico){} manager::manager(const manager &m):abstr_emp(m) { chargeof=m.chargeof; } void manager::showall()const { abstr_emp::showall(); std::cout<<"chargeof: "<<chargeof<<std::endl; } void manager::setall() { abstr_emp::setall(); std::cout<<"chargeof:"; std::cin>>chargeof; } //////////////////class fink methods/////////////////////// fink::fink():abstr_emp(),reto("null"){} fink::fink(const std::string &fn, const std::string &ln, const std::string &j, const std::string &re):abstr_emp(fn,ln,j) { reto=re;} fink::fink(const abstr_emp &e,const std::string &re):abstr_emp(e),reto(re){} fink::fink(const fink &f):abstr_emp(f) { reto=f.reto; } void fink::showall()const { abstr_emp::showall(); std::cout<<"reto: "<<reto<<std::endl; } void fink::setall() { abstr_emp::setall(); std::cout<<"reto:"; std::cin>>reto; } /////////////class highfink//////////////////////////////////////// highfink::highfink():abstr_emp(),manager(),fink(){} highfink::highfink(const std::string &fn,const std::string &ln, const std::string &j,const std::string &re,int ico):abstr_emp(fn,ln,j), manager(fn,ln,j,ico),fink(fn,ln,j,re){} highfink::highfink(const abstr_emp &e,const std::string &re,int ico):abstr_emp(e), manager(e,ico),fink(e,re){} highfink::highfink(const fink &f, int ico):abstr_emp(f),manager(f,ico),fink(f){} highfink::highfink(const manager &m,const std::string &re):abstr_emp(m),manager(m),fink(m,re){} highfink::highfink(const highfink &hf):abstr_emp(hf),manager(hf),fink(hf){} void highfink::showall()const { abstr_emp::showall(); std::cout<<"chargeof: "<<manager::inchargeof()<<std::endl; std::cout<<"reto : "<<fink::reportsto()<<std::endl; } void highfink::setall() { abstr_emp::setall(); std::cout<<"chargeof:"; std::cin>>manager::inchargeof(); std::cout<<"reto:"; std::cin>>fink::reportsto(); } }//namespace kp; #endif //EMP_H_
测试文件emp.cpp
//filename: emp.cpp //date: 2009-11-27 //author: xhl #include<iostream> #include"emp.h" int main(int argv,char **argc) { using std::endl; using std::cin; using std::cout; using kp::abstr_emp; using kp::employee; using kp::fink; using kp::highfink; using kp::manager; employee em("trip","harris","thumper"); cout<<em<<endl; em.showall(); cout<<endl; manager ma("amorphia","spindragon","nuancer",5); cout<<ma<<endl; ma.showall(); cout<<endl; fink fi("matt","oggs","oiler","juno barr"); cout<<fi<<endl; fi.showall(); cout<<endl; highfink hf(ma,"curly kew"); hf.showall(); cout<<endl; cin.get(); highfink hf2; hf2.showall(); cout<<endl; abstr_emp *tri[4]={&em,&fi,&hf,&hf2}; for (int i=0;i<4;i++) { tri[i]->showall(); cout<<endl; } return 0; }
欢迎一起交流:xhl_hylo@foxmail.com
百度空间(Someone海螺):http://hi.baidu.com/hailuojj
csdn博客(keepingdo):http://hi.csdn.net/keepingdo
新浪blog(Someone海螺):http://blog.sina.com.cn/hylo
相关文章推荐
- 类多继承及包含练习(c++primer plus)
- C++ Primer Plus第六版编程练习12.5解答
- C++ primer plus 练习7.8a
- C++ Primer Plus (第6版)编程练习 代码-----第五章
- 继承和动态内存分配(C++ Primer Plus 第十三章)
- C++ primer plus 练习9
- c++ primer plus 第六版第三章编程练习答案
- C++ Primer Plus 第六版 第四章编程练习记录
- c++ primer plus 第六章变成练习 第4题
- c++ primer plus(第6版)中文版 第八章编程练习答案
- C++ Primer Plus第六版编程练习11.4解答
- c++ primer plus(第6版)中文版 第十章编程练习答案
- 【C++ Primer Plus 编程练习】 3.7
- c++ primer plus(第6版)中文版 第十一章编程练习答案
- C++ Primer Plus 第六版_编程练习(2)(Chapter_three 1-7)
- C++ primer plus第六版课后编程练习答案:7.3
- c++ primer plus(第6版)中文版 第四章编程练习答案
- 【学习C++】C++ Primer Plus (第六版)第八章编程练习1-7
- c++ primer plus 第五版 第七章 编程练习 第 8 题 (字符数组转成字符串,trim使用,判断空行)
- C++ Primer Plus编程练习 7.13-2