星球狂想战队|一起来学C++:C++中的代码重用( 九 )
下面来看一个例子 , 并介绍有哪些问题以及如何解决它们 。 要使用MI , 需要几个类 。 我们将定义一个抽象基类Worker , 并使用它派生出Waiter类和Singer类 。 然后 , 便可以使用MI从Waiter类和Singer类派生出SingingWaiter类(参见图14.3) 。 这里使用两个独立的派生来使基类(Worker)被继承 , 这将导致MI的大多数麻烦 。 首先声明Worker、Waiter和Singer类 , 如程序清单14.7所示 。
//worker0.h--workingclasses#ifndefWORKER0_H_#defineWORKER0_H_#includeclassWorker//anabstractbaseclass{private:std::stringfullname;longid;public:Worker():fullname("noone"),id(0L){}Worker(conststd::string&s,longn):fullname(s),id(n){}virtual~Worker()=0;//purevirtualdestructorvirtualvoidSet();virtualvoidShow()const;};classWaiter:publicWorker{private:intpanache;public:Waiter():Worker(),panache(0){}Waiter(conststd::string&s,longn,intp=0):Worker(s,n),panache(p){}Waiter(constWorker&wk,intp=0):Worker(wk),panache(p){}voidSet();voidShow()const;};classSinger:publicWorker{protected:enum{other,alto,contralto,soprano,bass,baritone,tenor};enum{Vtypes=7};private:staticchar*pv[Vtypes];//stringequivsofvoicetypesintvoice;public:Singer():Worker(),voice(other){}Singer(conststd::string&s,longn,intv=other):Worker(s,n),voice(v){}Singer(constWorker&wk,intv=other):Worker(wk),voice(v){}voidSet();voidShow()const;};#endif程序清单14.7的类声明中包含一些表示声音类型的内部常量 。 一个枚举用符号常量alto、contralto等表示声音类型 , 静态数组pv存储了指向相应C-风格字符串的指针 , 程序清单14.8初始化了该数组 , 并提供了方法的定义 。
【星球狂想战队|一起来学C++:C++中的代码重用】程序清单14.8worker0.cpp
//worker0.cpp--workingclassmethods#include"worker0.h"#includeusingstd::cout;usingstd::cin;usingstd::endl;//Workermethods//mustimplementvirtualdestructor,evenifpureWorker::~Worker(){}voidWorker::Set(){cout<<"Enterworker'sname:";getline(cin,fullname);cout<<"Enterworker'sID:";cin>>id;while(cin.get()!='n')continue;}voidWorker::Show()const{cout<<"Name:"<<fullname<<"n";cout<<"EmployeeID:"<<id<<"n";}//WaitermethodsvoidWaiter::Set(){Worker::Set();cout<<"Enterwaiter'spanacherating:";cin>>panache;while(cin.get()!='n')continue;}voidWaiter::Show()const{cout<<"Category:waitern";Worker::Show();cout<<"Panacherating:"<<panache<<"n";}//Singermethodschar*Singer::pv[]={"other","alto","contralto","soprano","bass","baritone","tenor
推荐阅读
- 游戏小怪兽|达仁星球:最新抖音直播留人控场方法和技巧
- 巅峰战队|VERTIX户外手表,勇攀新高峰——COROS
- 星球狂想战队|世界科技格局
- 家族战队|10年后退化成了“简陋版”,快看丨腾讯微博将于9月28日停服
- 路人战队|失去苹果的代价,有300万人承担不起,请别口嗨“抵制苹果”了
- 家族战队|就读懂了湖南互联网产业,读懂了这些话
- 路人战队|雷军用了什么法宝?,超越格力?新型洗烘一体机实现“弯道超车”
- NASA|NASA发现“黄金星球”,价值超万万亿美元,美国已准备前往
- 天文在线|既有大气又有水 宝藏星球土卫六,宇宙中的超级泰坦
- 通天战队|别人偷动你手机,屏幕就会一戳一个洞,只有你可以打开,教你一招