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

多继承练习(MI)《c++ primer plus》 p536-5

2009-11-27 22:20 344 查看
多继承练习(MI)《c++ primer plus》 p536上的第五题

还请各位高手指点一二哈

谢谢了

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: