第十一周项目3-警察和厨师(2)

/*
 *Copyright (c) 2016,烟台大学计算机学院
 *All rights reserved.
 *文件名称:zyt.cpp
 *作    者:张毓桐
 *完成日期:2016年9月10日
 *版 本 号: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;

}

继承是面向对象编程中的一个重要特性,它可以让子类(派生类)继承父类(基类)的属性和方法。在继承中,子类可以直接使用父类的方法,也可以通过覆盖或者重写父类的方法来实现自己的功能。 假设我们已经有了一个基类 Employee,现在需要创建 Chef(厨师)和 Waiter(服务员)这两个派生类。那么我们可以通过继承来实现这个过程。 在 C++ 中,继承语法如下所示: ``` class DerivedClass : accessSpecifier BaseClass { // derived class members }; ``` 其中,accessSpecifier 可以是 public、protected 或者 private,表示派生类对基类成员的访问权限。如果不指定,默认为 private。 在我们的例子中,可以这样定义 Chef 和 Waiter 类: ``` // 定义 Employee 基类 class Employee { public: string name; int age; float salary; virtual void work() {} }; // 定义 Chef 类,继承自 Employee class Chef : public Employee { public: void cook() { // 厨师的工作内容 } }; // 定义 Waiter 类,继承自 Employee class Waiter : public Employee { public: void serve() { // 服务员的工作内容 } }; ``` 上述代码中,Chef 和 Waiter 都继承了 Employee 基类,并且分别定义了自己的工作内容。 需要注意的是,在 Employee 类中定义了一个虚函数 work(),这是为了方便后面在多态性方面的应用。如果需要在 Chef 或 Waiter 类中重写 work() 函数,可以直接在派生类中重新定义该函数即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值