C++实验7继承与派生(二)

所使用的开发工具及环境:PC机一套 Visual Studio 2010

实验要求:
1.硬件基本配置:Intel PentiumIII以上级别的CPU,大于64MB的内存。
2.软件要求:Window 2000操作系统,Visual Studio 6.0或更高版本开发环 境。
3.实验学时:2学时
4.实现实验内容中的题目。
5.写实验报告

实验目的:
1. 理解继承和派生的概念;
2. 理解继承在面向对象程序设计中的重要作用;
3. 掌握通过继承派生出一个新类的方法;
4. 进一步学习简单面向对象程序的编写;

实验内容:

  1. 教师干部类//50分
    设计一个基类Person类,再派生出教师类(Teacher)、干部类(Cadre),再采用多重继承派生出新类:Teacher_Cadre
    要求如下:
    1)Person类包含:姓名、年龄、性别、地址、电话等;
    在 Teacher类中新增加:title(职称) ,在 Cadre 类中新增加:post(职务) ,在 Teacher_Cadre中新增加:wages(工资)成员;
    2)Person类,Teacher类,Cadre类都包含:display()函数,分别输出本类中的成员信息;
    3)在Teacher类,Cadre类中的姓名、年龄、性别、地址、电话等数据成员使用相同名字,在派生类中引用这些数据成员时,采用指定作用域的方式;
    4)在派生类 Teacher_Cadre 的成员函数 Show()中调用 Teacher 类中的 display()函数,输出姓名、年龄、性别、地址、电话,职称;另外同时再输出其他成员变量。
    5)使用对象数组保存输入的对象;

    #include
    #include
    using namespace std;
    class Teacher
    {
    public:
    Teacher(string n, int a, char s, string add, long int te, string ti);
    void display();
    protected:
    string name;
    int age;
    char sex;
    string address;
    long int tel;
    string title; //职称
    };

    class Cadre
    {
    public:
    Cadre(string n, int a, char s, string add, long int t, string p);
    void display();
    protected:
    string name;
    int age;
    char sex;
    string address;
    long int tel;
    string post; //职务
    };

    class Teacher_Cadre:public Teacher, public Cadre //声明多重继承的Teacher_Cadre类
    {
    public:
    Teacher_Cadre(string n, int a, char s, string add, long int t, string ti, string p,double w);
    void show();
    protected:
    double wages;
    };

    Teacher::Teacher(string n, int a, char s, string add, long int te, string ti)
    {
    name = n;
    age = a;
    sex = s;
    address = add;
    tel = te;
    title = ti;
    }

    Cadre::Cadre(string n, int a, char s, string add, long int t, string p)
    {
    name = n;
    age = a;
    sex = s;
    address = add;
    tel = t;
    post = p;
    }

    void Teacher::display()
    {
    cout << "name: " << name << endl;
    cout << "age: " << age << endl;
    cout << "sex: " << sex << endl;
    cout << "address: " << address << endl;
    cout << "tel: " << tel << endl;
    cout << "title: " << title << endl;
    }

    void Cadre::display()
    {
    cout << "name: " << name << endl;
    cout << "age: " << age << endl;
    cout << "sex: " << sex << endl;
    cout << "address: " << address << endl;
    cout << "tel: " << tel << endl;
    cout << "post: " << post << endl;
    }

    void Teacher_Cadre::show() //在派生类Teacher_Cadre的成员函数show中调用Teacher类中的display函数
    {
    Teacher::display();
    cout << "post: " << Cadre::post << endl; //对两个基类中的数据成员用相同的名字,在引用这些数据成员时,指定作用域
    cout << "wages: " << wages << endl;
    }

    Teacher_Cadre::Teacher_Cadre(string n, int a, char s, string add, long int t, string ti, string p,double w):Teacher(n, a, s, add, t, ti),Cadre(n, a, s, add, t, p)
    {
    wages = w;
    }

    int main( )
    {
    Teacher_Cadre ct[3]={ Teacher_Cadre(“zhangsan”,18,‘M’,“chengdu”,“13256464684”,“教授”,
    “书记”,10000), Teacher_Cadre(“lisi”,25,'W",“Beijing”,“17656343413”,“副教授”,“主任”,8000),
    Teacher_Cadre(“wanger”,“30”,‘M’,“shandong”,“1861655156”,“讲师”,“院长”,20000)};
    for(int i=0;i<3;i++)
    tc[i].show();
    return 0;
    }

  2. 小型公司人员管理
    某小型公司有四类人员: 总经理、 技术人员、 销售经理、 推销员。 设计一个基类
    employee派生出 manager(总经理) 、technician(技术人员) 、salesmanager(销售经理) 、
    saleman(推销员)。销售经理既是经理又是销售人员,兼具两类人员的特点,因此同时继承
    manager 和salesman 两个类。 //50分
    1)类定义
    ①employee类:
    基本信息:编号、姓名、性别、出生日期、职位、薪水等;出生日期使用自定义的
    Date(日期)类;其中基本信息为 private 属性,成员函数为 public 属性;多个构造函数:缺省构造函数、带参数的构造函数、带默认参数的构造函数;可以从外部访问类成员函数;
    ②Date 类:
    成员变量:年、月、日
    成员函数:SetYear(int year)、SetMonth(int month)、SetDay(int day)、GetYear()、GetMonth()、
    GetDay()
    ③派生类 technician:新增属性:工作时间
    派生类 saleman:新增属性:销售额、所属部门
    2)实现人员信息的录入与显示;
    3)计算并显示个人月薪:
    月薪计算办法:总经理拿固定月薪 8000 元,技术人员按每小时25元领取月薪;推销员的
    月薪按当月销售额的4%提成; 销售经理固定月薪5000元加所管辖部门当月销售总额的
    5‰ 。
    [实验提示]
    ① 在基类中,除了定义构造函数和析构函数,还应统一定义对各类人员信息应有的操作,
    规范类族中各派生类的基本行为,但是各类人员的月薪计算方法不同,不能在基类
    employee 中统一确定计算方法。各类人员信息的显示内容不同,同样不能在基类
    employee中统一确定显示方法。在基类中实现上述功能的函数体应为空,在派生类中
    根据同名覆盖原则
    定义各自的同名函数实现具体功能。
    ②将基类 employee 分成两个独立文档:employee.h(类声明头文件) 和
    employy.cpp(类实现文件)
    ② “职位”的类型设定为 int;
    Employee.h

    #ifndef EMPLOYEE_H
    #define EMPLOYEE_H
    #include
    #include
    using namespace std;
    class Data
    {
    public:
    Data(){}
    void SetYear(int year){m_year = year;}
    void SetMonth(int month){m_month = month;}
    void SetDay(int day){m_day = day;}
    void GetYear(){cin>>m_year;cout<<“年”< void GetMonth(){cin>>m_month;cout<<“月”< void GetDay(){cin>>m_day;cout<<“日”< void display(){cout<<“出生日期:”<

     Data(Data &obj)
     {
     	m_year=obj.m_year;
     	m_month=obj.m_month;
     	m_day=obj.m_day;
     }
    
     ~Data()
     {cout<<"员工生日已经录入"<

    private:
    int m_year;
    int m_month;
    int m_day;
    };

    class employee
    {
    public:
    employee(){}
    void get_employee()
    {
    cout<<“请输入编号:”;
    cin>>m_ID;
    cout<<“请输入姓名:”;
    cin>>m_name;
    cout<<“请输入性别:”;
    cin>>m_sex;
    cout<<“请输入生日:”;
    birthday.GetYear();
    birthday.GetMonth();
    birthday.GetDay();
    }
    void display()
    {
    cout<<“编号”< cout<<“姓名”< cout<<“性别”< birthday.display();
    }
    ~employee()
    {cout<<“员工信息已录入”< private:
    int m_ID;
    char m_name;
    char m_sex;
    int m_birthday;
    string m_post;
    int m_wages;
    Data birthday;
    };

    class manager:public employee
    {
    public:
    void salary()
    {
    cout<<“职位:经理”< cout<<“工资:8000”< }
    };

    class technician:public employee
    {
    public:
    technician(){}

     void get_technician()
     {
     	cout<<"职位:技术人员"<>m_time;
     }
     void display()
     {cout<<"工作时间:"<

    private:
    int m_time;
    };

    class saleman:public employee
    {
    public:
    saleman(){}
    int get_saleman()
    {
    cout<<“职位:销售员”< cout<<“请输入销售额”;
    cin>>m_sales;
    return m_sales;
    }
    void get_branch()
    {
    cout<<“请输入所属部门”< cin>>m_branch;
    }
    void display()
    {
    cout<<“销售额:”< cout<<“所属部门:”< }
    void salary()
    {cout<<“工资:”< private:
    int m_sales;
    string m_branch;
    };

    class salesmanager:public manager,public saleman
    {
    public:
    void salary()
    {
    cout<<“职位:销售经理”< money = saleman::get_saleman();
    cout<<“工资:”<<5000+money*0.05;
    }
    private:
    int money;
    saleman m_sales;
    };

    #endif

Employee.cpp

#include"employee.h"
int main()
{
	cout<<"M代表总经理,T代表技术人员,SM代表销售经理,S代表推销员"<>branch;
	P.display();

	if(branch == "M")
	{
		manager M ;
		M.salary();
	}
	else if (branch == "T")
	{
		technician T;
		T.get_technician();
		T.display();
		T.salary();
	}
	else if (branch == "SM")
	{
		salesmanager SM;
		SM.salary();
	}
	else
	{
		saleman S;
		S.get_saleman();
		S.get_branch();
		S.display();
		S.salary();
	}
	system("pause");
}

结果与分析 ( 收获、问题 )
理解了继承和派生的概念;
理解了继承在面向对象程序设计中的重要作用;
掌握了通过继承派生出一个新类的方法;
进一步学习了简单面向对象程序的编写;

你可能感兴趣的:(C++)