注册 登录
编程论坛 C++教室

请教各位大侠,帮我看看这个程序

ringlord 发布于 2013-05-15 14:47, 1054 次点击
#include<iostream>
#include<string>
using namespace std;

class Payroll{
public:
    Payroll(){};
    Payroll(double time,double salary)
    {
        workTime=time;
        salaryPurHour=salary;
   
        
    }
    void setWorkTime()
    {       cout<<"输入一周工作时间:";
         
             cin>>workTime;
            
    }
    double getWorkTime()
    {
        return workTime;
    }
    double getSalaryPurHour (double salary)
    {
        salaryPurHour=salary;
        return salaryPurHour;
    }

   
    double getTotalSalary()
    {
        double totalSalary=workTime*salaryPurHour;
        return totalSalary;
    }
private:
    double workTime;
    double salaryPurHour;
    double totalSalary;

};
 
int main(){

     Payroll myPayrollArray[10];

     int i;
     for(i=0;i<10;i++)
     myPayrollArray[i] .setWorkTime();
     cout<<"雇员\t\t"<<"本周工作时间\t\t"<<"单位时间工资\t\t"<<"本周应付总工资\t\t";   
     for( i=0;i<10;i++)
     {
          cout<<i+1<<"\t\t"<<myPayrollArray[i].getWorkTime ()<<"\t\t"<<myPayrollArray[i].getSalaryPurHour(50)
          <<"\t\t"<<myPayrollArray[i].getTotalSalary()<<endl;
     }
     return 0;
}


为什么这个程序输出不对
14 回复
#2
peach54602013-05-15 14:54
又来一个
#3
ringlord2013-05-15 16:45
找到错误了,这么纠正就对了:
void setSalaryPurHour (double salary)
    {
        salaryPurHour=salary;
        
    }
    double getSalaryPurHour()
    {
        return salaryPurHour;
        
    }
但是为什么呢
#4
peach54602013-05-15 18:09
你不知道什么叫做调试吗?
#5
ringlord2013-05-15 20:09
回复 4楼 peach5460
我调试了呀,还是没弄懂
#6
ringlord2013-05-15 20:41
回复 4楼 peach5460
我想问的是:
为什么这个double getSalaryPurHour (double salary)
    {
        salaryPurHour=salary;
        return salaryPurHour;
    }
不对?
这个编写是将访问器和获取器函数编成一个函数了,我想知道不对的道理
#7
peach54602013-05-16 08:14
double getSalaryPurHour (double salary)
    {
        salaryPurHour=salary;
        return salaryPurHour;
    }
你的输入就是你的return
既然输入就是输出,你还输入干嘛?
这个逻辑不对吧?

这就叫你调试过?
#8
ringlord2013-05-16 15:48
回复 7楼 peach5460
谢谢你的回复。那么就算是我的输入就是输出,
double getTotalSalary()
    {
        double totalSalary=workTime*salaryPurHour;
        return totalSalary;
    }
这个函数salaryPurHour为什么没有用我输入的值计算呢?因为主程序中显示前一个函数还是对的(即你所说的输入等于输出,我设置为50,屏幕上也显示50),但是我调试的时候,这个函数里的salaryPurHour就没有变成50,是什么原因呢?
再次感谢
#9
peach54602013-05-16 17:16
你去学习一下iostream吧...我就提示到这里...

另外,我还是不信你调试过...或者说你调试太粗心了吧...

[ 本帖最后由 peach5460 于 2013-5-16 17:29 编辑 ]
#10
ringlord2013-05-17 10:08
回复 9楼 peach5460
谢谢了。
看来没人能清晰指出错误的原因
#11
peach54602013-05-17 10:16
以下是引用ringlord在2013-5-17 10:08:39的发言:

谢谢了。
看来没人能清晰指出错误的原因

我不是让你去熟悉iostream的流程么

你跟踪的时候,就没发现有什么异样?
cout的流向是什么样的你告诉我...

你没发现程序执行流程是先进的getTotalSalary再进的getSalaryPurHour(50),值都还没赋就进行计算,不错才有鬼...
#12
ringlord2013-05-17 11:12
回复 11楼 peach5460
对呀,我注意到了,但是我想知道原因,为什么是这样的
cout<<i+1<<"\t\t"<<myPayrollArray[i].getWorkTime ()<<"\t\t"<<myPayrollArray[i].getSalaryPurHour(50)
          <<"\t\t"<<myPayrollArray[i].getTotalSalary()<<endl;
这个cout不是按顺序执行吗?
再者,你说熟悉iostream流程,有参考推荐给我看吗?本人刚接触C++,书上对这iostream没怎么解释呀
#13
ringlord2013-05-17 11:15
回复 11楼 peach5460
对呀,我注意到了,但是为什么是这样的呢
cout<<myPayrollArray[i].getSalaryPurHour(50)
          <<myPayrollArray[i].getTotalSalary()<<endl;
不是按照顺序执行吗?
#14
ringlord2013-05-17 11:16
哎呀,网不好,帖子重了,怎么删除重复的帖子
#15
peach54602013-05-17 12:31
http://blog.

百度cout执行顺序
几百个网址都在说这个事情...
1