阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。 【说明】 设计希赛IT教育研发中心的工资管理系统,该中心主要有3类人员:经理、销售员和销售经理。要求存储这些人员的编号、姓名和月工资,计算月工资并显示全部信息。月工资计算办法是:

admin2010-01-15  35

问题 阅读以下说明和C++程序,将应填入(n)处的字句写在对应栏内。
    【说明】
   设计希赛IT教育研发中心的工资管理系统,该中心主要有3类人员:经理、销售员和销售经理。要求存储这些人员的编号、姓名和月工资,计算月工资并显示全部信息。月工资计算办法是:经理拿固定月薪8000元;销售员拿固定工资1000元,然后再按当月销售额的4%提成;销售经理既拿固定月工资也领取销售提成,固定月工资为5000元,销售提成为所管辖部门当月销售总额的5‰。
   按要求设计一个基类employee,销售员类salesman,经理类manager,销售经理类 salesmanager。
   程序5-1是类employee的模块内容,程序5-2是类salesman的类模块内容,程序5-3是类manager的模块内容,程序5-4是类salesmanager的模块内容。在主测试程序中,输入张三所管部门月销售量10000后的输出结果如下:
                    张三所管部门月销售量:10000
                    销售经理:张三
                    编号:1001
                    本月工资:5050
   #include <iostream.h>
   #include <string.h>
   class employee
   {
   protected:
         int no;
         char *name;
         float salary;
   public:
         employee(int num,char *ch)
         {    no=num;
              name=ch;
              salary=0;  }
        virtual void pay()=0;
        virtual void display()
        {    cout<<"编号:"<<no<<endl;
             cout<<"本月工资:"<<salary<<endl; }
   };
   【程序5-2】
   class salesman:  (1)  
   {
   protected:
       float commrate, sales;
   public:
       salesman(int num,char *ch):employee(num,ch)
       {    commrate=0.04; }
       void pay()
       {    cout<<name<<"本月销售额:";
            cin>>saies;
            salary=sales*commrate+1000;    }
       void display()
       {    cout<<"销售员:"<<name<<endl;
            employee::display();  }
   };
   【程序5-3】
   class manager:  (1)  
   {
   protected:
       float monthpay;
   public:
       manager(int num,char *ch):employee(num,ch)
       {   monthpay=8000; }
       void pay()
       {    salary=monthpay;    }
       void display()
       {    cout<<"经理:"<<name<<endl;
            employee::display();  }
   };
  【程序5-4】
   class salesmanager:  (2)  
   {
   public:
       salesmanager(int num,char *ch):  (3)  
       {    monthpay=5000;
            commrate=0.005;}
       void pay()
       {    cout<<name<<"所管部门月销售量:";
               cin>>sales;
                (4)  }
       void display()
       {    cout<<"销售经理:"<<name<<endl;
                (5)  }
   };
   void main()            //主测试函数
   {    salesmanager p1 (1001,"张三");
        p1.pay();
        p1.display();
   }

选项

答案(1)virtual public employee (2)public manager,public salesman (3)employee(num,ch),manager(num,ch),salesman(num,ch) (4)salary=monthpay+commrate*sales; (5)employee::display();

解析 本题考查类的定义、继承及虚基类与虚函数的应用。
   首先我们来看一下基类employee的程序代码,在基类中构造了一个构造函数和两个虚函数,其中虚函数display()可以输出编号和工资。
   由整个程序的作用可以看出,类salesman与类manager应继承类employee,而类 salesmanager则应该继承类salesman与类manager。在每个类中都有函数pay()和display(),且在每个类中都对这两个函数进行了重新定义。这样这两个同名函数出现多个地址映射。要解决这个问题,在C++语言中,采用虚基类。因此,第(1)空的答案是virtual pubic employee。
   第(2)空也是表示类的继承,类salesmanager继承类salesman与类manager,因此,此空答案为public manager, public salesman。
   结合整个程序来看,其他三个类都是类salesmanager的父类,因此,第(3)空处应该填employee(num,ch),manager(num,ch),salesman(num,ch)。
   根据题目的要求,再结合主函数与类salesmanager的模块可以推出第(4)空处的功能是计算销售经理的月总工资,而计算方法是固定工资加提成。因此,答案为 salary=monthpay+commrate*sales。
   对比三个子类的display()函数,不难发现第(5)空应为employee::display()。
转载请注明原文地址:https://jikaoti.com/ti/wkW7FFFM
0

相关试题推荐
最新回复(0)