/* *Copyright(C) 2016,计算机与控制工程学院 *All rights reserved. *文件名:test.cpp *作者:张志新 *完成日期:2016年5月1日 *版本号:v1.0 * *问题描述:警察厨师类的改进,增加封装 */ #include<iostream> using namespace std; class Person//基类 { private: int age; string name; public: void action(); Person(int a,string n); string getName()//返回姓名 { return name; } }; Person::Person(int a,string n):age(a),name(n){} void Person::action() { cout<<name<<"do some action"<<endl; } class Polic:public Person//警察类 { private: int level;//增加军衔 Person leader;//警察的领导 public: void arrest(Person); void show(); Polic(int a,string n,int l,int la,string ln); }; Polic::Polic(int a,string n,int l,int la,string ln):Person(a,n),level(l),leader(la,ln){} void Polic::arrest(Person p1) { cout<<p1.getName()<<" is arrested by "<<getName()<<endl; } void Polic::show()//警察信息 { cout<<"Police "<<getName()<<", leader is " <<leader.getName()<<endl; } class Cook:public Person//厨师类 { private: double salary; Polic protector;//厨房的警察 public: void getCake(int ); void show(); Cook(int a,string n,double s,int pa,string pn,int pl,int pla,string pln); }; Cook::Cook(int a,string n,double s,int pa,string pn,int pl,int pla,string pln):Person(a,n), salary(s),protector(pa,pn,pl,pla,pln){} void Cook::getCake(int n) { cout<<"Cook "<<getName()<<"gave me "<<n<<" cakes."<<endl; } void Cook::show()//厨师的信息 { cout<<"Cook "<<getName()<<"salary is "<<salary<<".He is protected by Police "<< protector.getName()<<endl; } int main() { Person p1(20,"zhangsan");//定义一个人 p1.action(); Polic p2(30,"wangwu",2,50,"lisi");//定义一个警察 p2.arrest(p1);//警察逮捕那个人 Cook c(19,"xiaoming",10000,30,"wangwu",2,50,"lisi");// c.getCake(5);//厨师做cake c.show();//厨师被警察抓 return 0; }
学习心得:
在这个项目中对封装有了进一步的认识,发现了在写派生类的构造函数时应该注意的问题要注意顺序和形式【Person(a,n)】,要弄清基类与派生类中的参数时有哪些,不要弄混。1.还有在传入字符串的时候要加双引号否则出现错误 2.因为在基类Person中参数用的是私有的所以应该定义一个返回name的公有的成员函数。