请教C++题目 谢谢

编写一个基类Worker,并从中派生类计时工类HourlyWorker和计薪工类SalariedWorker。具体要求:1、每个工人的属性有:工号、名字、工作部门和小时工... 编写一个基类Worker,并从中派生类计时工类HourlyWorker和计薪工类SalariedWorker。具体要求:
1、每个工人的属性有:工号、名字、工作部门和小时工资;
2、虚函数void SetData([参数列表]);//用于输入每个工人的属性数据;
3、纯虚函数 void SetData();//实现派生类对象可以用键盘输入数据的方法;
4、虚函数 double ComputPay();//用于计算每个工人的周薪。计时工周薪的计算方法如下:如果hours在40小时以内,则周薪为小时工资乘以实际工作的小时数;如果hours超过40小时,则40小时以上的部分以1.5倍小时工资计薪。计薪工按每周40小时计周薪,而不管每周实际工作小时数。
5、虚函数 void Display();//输出每个工人的属性数据,其中工号宽度为6,名字和工作部门宽度为10,小时工资和周薪的精度为小数点后2位;
6、主函数的参考代码:
void main()
{
Worker *pWorker[10];
for(int i=0;i<10;)
{
pWorker[i++]=new HourlyWorker;
pWorker[i-1]->SetData();
pWorker[i++]=new SalariedWorker;
pWorker[i-1]->SetData();
}
for(i=0;i<10;i++)
pWorker[i]->Display();
}

PS:这个题目可能比较烦,,把程序编出来即可,不需要调试,比较急,9月7日13点前要回答啊,,求求好心人回答吧,,我会加分的,谢谢谢。。。。。。
展开
 我来答
软件哲学
2011-09-07 · TA获得超过494个赞
知道小有建树答主
回答量:791
采纳率:100%
帮助的人:560万
展开全部
我一个东南大学的朋友,前天半夜忙代码,昨天忙着交,你这又是哪个学校的,今天要交?
用你的主函数,可以正确显示。两个字类一个父类
#include <stdio.h>
#include <Windows.h>

class Worker
{
public:
int m_WId;
char m_Name[20];
char m_Section[20];
double m_Money;
virtual void SetData( int t_WId , char t_Name[] , char t_Section[] , double t_Money )
{
this->m_WId = t_WId;
memcpy( m_Name , t_Name , sizeof(char)*20 );
memcpy( m_Section , t_Section , sizeof(char)*20 );
//for ( int i = 0 ; i < 20 ; i ++ )
//{
// this->m_Name[i] = t_Name[i];
// this->m_Section[i] = t_Section[i];
//}
this->m_Money = t_Money;
}
virtual void SetData()=0;
virtual double ComputPay()//用于计算每个工人的周薪。计时工周薪的计算方法如下:如果hours在40小时以内,则周薪为小时工资乘以实际工作的小时数;如果hours超过40小时,则40小时以上的部分以1.5倍小时工资计薪。计薪工按每周40小时计周薪,而不管每周实际工作小时数。
{
return 0;
}
virtual void Display()//输出每个工人的属性数据,其中工号宽度为6,名字和工作部门宽度为10,小时工资和周薪的精度为小数点后2位;
{
printf("m_WId = %6d \nm_Name = %s \nm_Section = %s \nm_Money = %.2f \nComputPay = %.2f \n\n\n" ,
m_WId , m_Name , m_Section , m_Money , ComputPay() );
}

};

class HourlyWorker : public Worker
{
public:
int m_hour;
void SetData()
{
m_WId = 1;
char t_Name[20] = "11111";
char t_Section[20] = "22222";
memcpy( m_Name , t_Name , sizeof(char)*20 );
memcpy( m_Section , t_Section , sizeof(char)*20 );
m_Money = 12.5;
m_hour = 50;
}
double ComputPay()
{
if ( m_hour <= 40 )
{
return (double)(m_hour * m_Money);
}

return (double)( (40 * m_Money) + ((m_hour - 40) * m_Money * 1.5) );
}
};

class SalariedWorker : public Worker
{
public:
void SetData()
{
m_WId = 2;
char t_Name[20] = "33333";
char t_Section[20] = "44444";
memcpy( m_Name , t_Name , sizeof(char)*20 );
memcpy( m_Section , t_Section , sizeof(char)*20 );
m_Money = 17.5;
}
double ComputPay()
{
return (double)(40 * m_Money);
}
};

void main()
{
Worker *pWorker[10];
for(int i=0;i<10;)
{
pWorker[i++]=new HourlyWorker;
pWorker[i-1]->SetData();
pWorker[i++]=new SalariedWorker;
pWorker[i-1]->SetData();
}
for(int i=0;i<10;i++)
{
pWorker[i]->Display();
}

system("pause");
}
追问
这个是C++吗?为什么我感觉是C语言啊?
追答
你把输出这句
printf("m_WId = %6d \nm_Name = %s \nm_Section = %s \nm_Money = %.2f \nComputPay = %.2f \n\n\n" ,
m_WId , m_Name , m_Section , m_Money , ComputPay() );

#include
#include
这两个头
换了就是了,因为你要求格式,也就是长度,还有小数点后2位,所以我首先想到的就是%6d、%.2f
C++的cout 我不知道怎么实现如何控制长度
要么你就用CString 的Format 格式化一下,然后输出CString也行,但是CString 的格式化也是这么格式化的,只不过你看不到了。
其实,已经融入了类的概念,就已经是C++了,C语言和C++的区别可不是那么几个函数,而是编程思想了,一个面向过程,一个半面向对象了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式