请教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点前要回答啊,,求求好心人回答吧,,我会加分的,谢谢谢。。。。。。 展开
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点前要回答啊,,求求好心人回答吧,,我会加分的,谢谢谢。。。。。。 展开
1个回答
展开全部
我一个东南大学的朋友,前天半夜忙代码,昨天忙着交,你这又是哪个学校的,今天要交?
用你的主函数,可以正确显示。两个字类一个父类
#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");
}
用你的主函数,可以正确显示。两个字类一个父类
#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++的区别可不是那么几个函数,而是编程思想了,一个面向过程,一个半面向对象了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询