p->count(170);
p->show(); }
结果如下:
执行类EMP的构造函数 执行类EMP的count()函数
执行类EMP的show()函数,输出薪水:600 执行类EMP的构造函数 执行类Manager的构造函数
执行类Manager的count()函数,经理业绩奖励额:12000 执行类EMP的set函数,薪水赋值为<20000> 执行类EMP的get()函数,返回薪水值<20000> 执行类Manager的show()函数,输出薪水:20000 执行类EMP的构造函数 执行类Seller的构造函数
执行类Seller的count()函数,销售员的销售额:120000 执行类EMP的set函数,薪水赋值为<8000> 执行类EMP的get()函数,返回薪水值<8000> 执行类Seller的show()函数,输出薪水:8000 执行类EMP的构造函数
- 11 -
执行类Piecer的构造函数
执行类Piecer的count()函数,计件工生产产品件数:80 执行类EMP的set函数,薪水赋值为<3200> 执行类EMP的get()函数,返回薪水值<3200> 执行类Piecer的show()函数,输出薪水:3200 执行类EMP的构造函数 执行类Hourer的构造函数
执行类Hourer的count()函数,小时工工时数:170 执行类EMP的set函数,薪水赋值为<1900> 执行类EMP的get()函数,返回薪水值<1900> 执行类Hourer的show()函数,输出薪水:1900 执行类Hourer的析构函数 执行类EMP的析构函数 执行类Piecer的析构函数 执行类EMP的析构函数 执行类Seller的析构函数 执行类EMP的析构函数 执行类Manager的析构函数 执行类EMP的析构函数 执行类EMP的析构函数 Press any key to continue
- 12 -
程序设计的亮点:
void count(double n)//执行类Manager的count()函数 {
double i=n;
cout<<\执行类Manager的count()函数,经理业绩奖励额:\ Emp::set(n+8000); }
- 13 -
类Manager的成员函数调用Emp的公有成员的成员函数set()来对salary进行赋值
2.类Person、Student、Graduate和GS(选作) 知识提示:
运用虚基类解决类的继承中的二义性问题。 题目:
设计类Person表示人员,以类Person为基类公有派生出类Student和类Graduate分别表示本科生和研究生,由类Student和类Graduate公有派生出类GS表示本硕连读生。编程实现对类GS对象所有数据成员值的修改和输出显示。 具体描述:
设计类Person表示人员,包含name(字符数组char [21])和age(int型)两个数据成员,分别表示人员的姓名和年龄,有成员函数getn()和geta()用于获取数据成员name和age的值,有成员函数p_set()用于修改name和age的值。
由类Person公有派生出类Student和类Graduate,分别用与表示本科生和研究生。
类Sstudent新增数据成员xh(字符数组 char[9]型)表示学好,新增成员函数s_set()用于修改数据成员xh,新增成员函数getx()用于获取数据成员xh的值
类Graduate新增数据成员id(字符数组 char[11])表示研究生的学号,新增成员函数g_set()用于修改数据成员id,新增成员函数getid()用于获取数据成员id的值。
由类Student和类Graduate公有派生出类GS表示本硕连读生。
- 14 -
要求:
1. 所有类定义时,数据成员为private属性,成员函数为public属性,各成员函数的参数请按需要自行设定。
2. 所有类都要求编写构造函数和析构函数,构造函数都为有参函数且具有默认参数值,构造函数完成数据成员的初始化。
3. 所有函数都要有明确的执行信息输出,例如类Person的构造函数中应明确输出“执行类Person的构造函数”。
4. 编写主函数main(),在其中编写程序以实现对GS对象的所有数据成员值的修改和输出显示。
5. 为便于理解,程序执行结果可参考下图
编程设计思想:
Person为基类,类Student和类Graduate都为类Person的基类公有派
生类。GS又由类Student和类Graduate公有派生出来。为了避免在派生类中产生二义性。
程序源代码:
//20102225 徐骏 #include
- 15 -