Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误的加法值_C++_Addition - Fatal编程技术网

C++ 错误的加法值

C++ 错误的加法值,c++,addition,C++,Addition,在这个程序中,我接受一些值,然后添加它们。程序正在接受值,但显示错误的加法 #include<iostream.h> #include<conio.h> class Employee { char name[30]; int id; public: void Getdata() { cout<<"Enter Name: "; cin>>name; cout<

在这个程序中,我接受一些值,然后添加它们。程序正在接受值,但显示错误的加法

#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();
}
#包括
#包括
班级员工
{
字符名[30];
int-id;
公众:
void Getdata()
{
coutname;
库蒂德;
}
雇员()
{
}
void Putdata()
{

cout您正在从默认构造函数中未初始化的成员计算
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);
}
>P>另一个要考虑的是<代码>主< /代码>应该返回一个整数而不是无效的。返回<代码>无效>代码>是错误的。

  • 也不要使用字符串,而是使用
    std::string
    它值得使用:

    class Employee{
        std::string name;
        int id;
        // ...
    };
    
  • 同样,从
    员工
    中获取
    工资
    与此无关: 问问自己:“salray是一名员工吗?”因此相关的是实现一种
    Has-a
    关系,而不是
    is-a
    ,因为员工确实有薪水,但他不是salray

    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();
    
    }
    
    班级工资{
    公众:
    薪金():
    sal{},basic{},hra{},da{},cla{}{
    }
    空集(){
    标准::cout>basic;
    std::cout>hra;
    std::cout>da;
    std::cout>cla;
    sal=基础+hra+da+cla;
    }
    无效显示(){
    
    std::听起来你可能需要学习如何使用调试器来逐步完成代码。有了一个好的调试器,你可以逐行执行你的程序,看看它偏离了你的预期。如果你要做任何编程,这是一个必不可少的工具。进一步阅读:这与你的问题无关,但与薪水有关“来自员工”似乎是一个非常奇怪的类层次结构。我的意思是,工资在什么方面与员工相同?另外,您是否碰巧使用了TurboC++?
    void main
    ,并且您使用的标题将/不应在标准投诉编译器中编译。
    sal=(basic+hra+da+cla)
    计算一个立即值并将
    sal
    设置为该值。它不会创建一个关系,在事后更改任何使用的操作数都不会将
    sal
    追溯更新为新值。您必须在获取用户输入后执行计算。在
    Salray的默认构造函数中
    您编写了:
    sal=(basic+hra+da+cla);
    但这些成员变量尚未初始化!
    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();
    
    }