第十四章编程练习(5)

来源:互联网 发布:何方抢票软件 编辑:程序博客网 时间:2024/05/22 17:09

这里我充斥着大量的内联函数,这样看起来貌似比较乱?还是阅读性更好?

ARSTR.h

#pragma once#ifndef ABSTR_H_#define ABSTR_H_#include <string>#include <iostream>class abstr_emp {private:std::string fname;std::string lname;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 {public:~employee() {};employee() :abstr_emp() {};employee(const std::string & fn, const std::string & ln, const std::string & j) :abstr_emp(fn, ln, j) {};virtual void ShowAll()const{abstr_emp::ShowAll();};virtual void SetAll() { abstr_emp::SetAll(); };};class manager :virtual public abstr_emp {private:int inchargeof;protected:int InChargeof() const { return inchargeof; }int & InChargeof() { return inchargeof; }public:~manager() {};manager() :abstr_emp(), inchargeof(0) {};manager(const std::string & fn, const std::string & ln,const std::string & j, int ico = 0):abstr_emp(fn, ln, j), inchargeof(ico) {};manager(const abstr_emp & e, int ico) :abstr_emp(e), inchargeof(ico) {};manager(const manager & m) :abstr_emp(m) { inchargeof = m.inchargeof; };virtual void ShowAll()const;virtual void SetAll();};class fink :virtual public abstr_emp {private:std::string reportsto;protected:const std::string ReportsTo()const { return reportsto; }std::string & ReportsTo(){ return reportsto; }public:~fink() {};fink() :abstr_emp() {};fink(const std::string & fn, const std::string & ln,const std::string & j, const std::string & rpo):abstr_emp(fn, ln, j), reportsto(rpo) {};fink(const abstr_emp & e, const std::string & rpo):abstr_emp(e), reportsto(rpo) {};fink(const fink & e) :abstr_emp(e) { reportsto = e.reportsto; };virtual void ShowAll()const;virtual void SetAll();};class highfink :publicmanager,public fink{public:~highfink() {};highfink() :manager(), fink() {};highfink(const std::string & fn, const std::string & ln,const std::string & j, const std::string & rpo,int ico):manager(fn, ln, j,ico), fink(fn, ln, j, rpo) {};highfink(const abstr_emp & e, const std::string & rpo, int ico):manager(e, ico), fink(e, rpo) {};highfink(const fink & f, int ico):manager(f, ico), fink(f) {};highfink(const manager & m, const std::string & rpo):manager(m), fink(m, rpo) {};highfink(const highfink & h):manager(h), fink(h) {};virtual void ShowAll()const;virtual void SetAll();};#endif

ABSTR.cpp

#include "ABSTR.h"#include <iostream>abstr_emp::~abstr_emp() {};abstr_emp::abstr_emp(){fname = '\0';lname = '\0';job = '\0';}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{using std::cout;using std::endl;cout << "fname: " << fname<<endl<< "lname: " << lname<<endl<< "job: " << job<<endl;}void abstr_emp::SetAll(){using std::cout;using std::cin;using std::endl;cout << "Enter a first name: ";getline(cin, fname);cout << "Enter a last name: ";getline(cin, lname);cout << "Enter a job: ";getline(cin, job);}std::ostream & operator<<(std::ostream & os, const abstr_emp & e){os << "fname: " << e.fname<<std::endl<< "lname: " << e.lname<<std::endl<< "job: " << e.job << std::endl;return os;}void manager::ShowAll() const{abstr_emp::ShowAll();std::cout << "inchargeof: " << inchargeof << std::endl;}void manager::SetAll(){abstr_emp::SetAll();std::cout << "Enter a digit of intchargeof: ";std::cin >> inchargeof;while (std::cin.get() != '\n')continue;}void fink::ShowAll() const{abstr_emp::ShowAll();std::cout << "reportsto: " << reportsto << std::endl;}void fink::SetAll(){abstr_emp::SetAll();std::cout << "Enter a reportsto: ";getline(std::cin, reportsto);}void highfink::ShowAll() const{manager::ShowAll();std::cout << "reportsto: " << ReportsTo() << std::endl;}void highfink::SetAll(){manager::SetAll();std::cout << "Enter a repotrsto: ";getline(std::cin, ReportsTo());}

main.cpp

#include <iostream>#include "ABSTR.h"using namespace std;int main(void){employee em("Trip", "Harris", "Thumper");cout << em << endl;em.ShowAll();manager ma("Amorphia", "Spindragon", "Nuancer", 5);cout << ma << endl;ma.ShowAll();fink fi("Matt", "Oggs", "Oiler", "Juno Barr");cout << fi << endl;fi.ShowAll();highfink hf(ma, "Curly Kew");hf.ShowAll();cout << "Press a key for next phase:\n";//cin.get();highfink hf2;hf2.SetAll();cout << "Using an abstr emp * pointer:\n";abstr_emp * tri[4] = { &em, &fi, &hf, &hf2 };for (int i = 0; i < 4; i++)tri[i]->ShowAll();cin.get();return 0;}



0 0