【发布时间】:2019-04-22 19:34:15
【问题描述】:
在这个程序中,我接受一些值并添加它们。该程序正在接受值,但显示错误的添加。
#include<iostream.h>
#include<conio.h>
class Employee
{
char name[30];
int id;
public:
void Getdata()
{
cout<<"Enter Name: ";
cin>>name;
cout<<"Enter ID: ";
cin>>id;
}
Employee()
{
}
void Putdata()
{
cout<<name<<endl;
cout<<id<<endl;
}
};
class Salary : public Employee
{
int sal;
int basic, hra, da, cla;
public:
void set()
{
cout<<"Enter Basic Pay: ";
cin>>basic;
cout<<"Enter HRA: ";
cin>>hra;
cout<<"Enter Da: ";
cin>>da;
cout<<"Enter CLA: ";
cin>>cla;
}
Salary() : Employee()
{
sal = (basic+hra+da+cla) ;
}
void show()
{
cout<<"Salary: "<<sal;
}
};
void main()
{
clrscr();
Salary s;
s.Getdata();
s.set();
s.Putdata();
s.show();
getch();
}
我期望薪水为 13000,但结果却是薪水:11172。
【问题讨论】:
-
听起来你可能需要学习如何使用调试器来单步调试你的代码。使用好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏差在哪里。如果您要进行任何编程,这是必不可少的工具。进一步阅读:How to debug small programs 和 Debugging Guide
-
与您的问题无关,但从 Employee 派生的 Salary 似乎是一个非常奇怪的类层次结构。我的意思是,在什么方面薪水与雇员相同?
-
另外,您是否偶然使用了 TurboC++?
void main和您正在使用的标头将/不应在标准投诉编译器中编译。 -
sal = (basic+hra+da+cla) ;计算一个立即值并将sal设置为该值。它不会创建关系,更改任何事后使用的操作数不会将sal追溯更新为新值。您必须在获取用户输入后执行计算。 -
在
Salray的默认构造函数中你写了:sal = (basic+hra+da+cla) ;但是这些成员变量还没有初始化!