问题及代码:
/* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:zwj.cpp *作 者:张伟晶 *完成日期:2016年5月9日 *版 本 号:v1.0 * *问题描述:警察和厨师(2) *输入描述: *程序输出: */ #include<iostream> #include<string> using namespace std; class Person { private: int age; string name; public: Person(int ,string); void action(); int getage(){return age;} string getname(){return name;} }; Person::Person(int a,string nam):age(a),name(nam){} class Polic:public Person { private: int level; Person leader; // 增加了person 类的leader public: Polic(int ,string ,int ,Person ); void arrest(Person); }; Polic::Polic(int a,string nam,int l , Person lea):Person(a,nam),level(l),leader(lea){} class Cook:public Person { private: double salary; Polic protecter; // 增加了polic类的保护者 public: Cook(int ,string ,double,Polic); string getCake(int); }; Cook::Cook(int a,string nam,double s , Polic aa):Person(a,nam),salary(s),protecter(aa){} void Person::action() { cout<<name<<" have some action ."<<endl; } void Polic::arrest(Person p) { cout<<getname()<<" arrest "<<p.getname()<<" , "<<getname()<<" 的等级是 "<<level<<" , "<<getname()<<" 的年龄是 "<<getage()<<endl; cout<<endl; // police 的 leader cout<<getname()<<" 的领导是 "<<leader.getname()<<endl; cout<<endl; cout<<leader.getname()<<" 的年龄是 "<<leader.getage()<<endl; cout<<endl; } string Cook::getCake(int a) { cout<<getname()<<" get "<<a<<" cakes."<<endl; cout<<endl; // cook 的保护者 cout<<getname()<<" 的保护者是 "<<protecter.getname()<<endl; return getname(); } int main() { Person p(20,"person1"); Person leader1(20,"leader1"); Polic police(23,"police2",3,leader1); Cook cook(19,"cook3",5000,police); police.arrest(p); cook.getCake(5); return 0; }
运行结果:
知识点总结:
定义构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类成员的初始化,也可以自动调用基类构造函数完成。要保证在基类中定义了派生类需要的构造函数。
学习心得:
时间: 2024-11-05 18:32:36