添加值错误

问题描述 投票:2回答:1

在这个程序中,我接受了一些值,只是添加它们。该程序正在接受值,但显示错误的添加。

#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。

c++ addition
1个回答
4
投票

您正在从默认构造函数中的未初始化成员计算sal的值:sal = (basic + hra + da + cla);。所以你的程序运行一个未定义的行为。

那是因为构造函数在任何其他成员之前运行。要解决它,您应首先获取值,然后计算下一个:

Salary() : Employee(){
//  cout << basic << ", " << hra << ", " << da << ", " <<  cla << endl; // this line proves that hra, basic... are not initialized.
    set(); // assign values before calculate.
    sal = (basic + hra + da + cla);
}
  • 我建议从默认构造函数中删除这一行:sal = (basic + hra + da + cla);并将其放在set中。所以set()看起来像: void set(){ cout << "Enter Basic Pay: "; cin >> basic; cout << "Enter HRA: "; cin >> hra; cout << "Enter Da: "; cin >> da; cout << "Enter CLA: "; cin >> cla; sal = (basic + hra + da + cla); // after getting values it is a good place here to process the sal. }
  • 另一件需要考虑的事情是main应该返回一个非空的整数。返回void是错误的。
  • 也不要使用字符串,但使用std::string值得使用: class Employee{ std::string name; int id; // ... };
  • 同样制作Salary来自Employee是无关紧要的:问问自己:“是一个雇员的骂人?”因此,相关的是实现Has-a关系而不是Is-a,因为员工确实有薪水,但他不是salaray。 class Salary { public: Salary() : sal{}, basic{}, hra{}, da{}, cla{} { } void set() { std::cout << "Enter Basic Pay: "; std::cin >> basic; std::cout << "Enter HRA: "; std::cin >> hra; std::cout << "Enter Da: "; std::cin >> da; std::cout << "Enter CLA: "; std::cin >> cla; sal = basic + hra + da + cla; } void show() { std::cout << "Salary: " << sal << std::endl; } private: int sal, basic, hra, da, cla; }; class Employee { public: Employee() : name{}, id{}, sal{} { } void Getdata() { std::cout << "Enter Name: "; std::getline(std::cin, name); std::cout << "Enter ID: "; std::cin >> id; sal.set(); } void Putdata() { std::cout << name << std::endl; std::cout << id << std::endl; sal.show(); } private: std::string name; int id; Salary sal; }; int main(){ Employee emp{}; emp.Getdata(); emp.Putdata(); }
  • 注意:我写的代码不能在“Turbo C ++”上编译。请放弃那个旧的和错误的编译器,并使用一个新的复杂的编译器。
© www.soinside.com 2019 - 2024. All rights reserved.