设置成员变量值后,该值在 getter 函数内部发生变化

after setting a member variable value the value is changing inside getter function

提问人:karim 提问时间:11/28/2020 更新时间:11/28/2020 访问量:97

问:

我正在尝试设置两个成员变量,它们是浮点型,并且也成功了一个(这只不过是直接在 setter 函数中分配的)。但是另一个需要一些计算,我在计算后对其进行了配置。对于第二个变量,我已经在 setter 函数中检查了它,发现它配置正确,但是当我试图通过或直接获取它时,它显示了一些奇怪的值。static_cast<float>getter function class object

源代码:

# include <iostream>
# include <math.h>
using namespace std;

class dosomething{
    public:
        float res_value_a;
        float res_value_b;

        void set_res_value_a ()
        {
            res_value_a = 0.35;
        }

        float get_res_value_a(){
            return res_value_a;
        }

        void set_res_value_b(int  set_value_b)
        {
            int b = pow (2, 6);
            float res_value_b = static_cast<float>(set_value_b)/b;
            cout<<"value of res_value_b after setting is: "<<res_value_b<<endl;
        }

        float get_res_value_b()
        {
            cout<<"value of res_value_b inside of getter function: "<<res_value_b<<endl;
            return res_value_b;
        }
};

int main()
{
    dosomething obj;
    obj.set_res_value_a();
    float ret_get_val_a = obj.get_res_value_a();
    cout<<"ret_get_val_a: "<<ret_get_val_a<<endl; // return value from function get_res_value_a
    cout<<"member variable res_value_a: "<<obj.res_value_a<<endl; // checking member variable value by object

    int  set_value_b;
    cin>> set_value_b;
    obj.set_res_value_b(set_value_b);
    float ret_get_val_b = obj.get_res_value_b();
    cout<<"ret_get_val_b: "<<ret_get_val_b<<endl; // return value from function get_res_value_b
    cout<<"member variable res_value_b: "<<obj.res_value_b<<endl; // checking member variable value by object

    return 0;
}

对于功能,我还给出了所需的输入和预期的输出——set_res_value_b

if set_value_b = 64 then res_value_b = 1
if set_value_b = 20 then res_value_b = 0.3125
if set_value_b = 134 then res_value_b = 2.09375

我可以给出一个错误值,那就是 。此错误的原因可能是什么?set_value_b = 20res_value_b = 4.59149e-41

C++ 浮动精度

评论


答:

3赞 MikeCAT 11/28/2020 #1

生产线

            float res_value_b = static_cast<float>(set_value_b)/b;

设置的不是成员变量的值,而是局部变量的值。

删除第一个以消除局部变量,并让它设置成员变量。float

            res_value_b = static_cast<float>(set_value_b)/b;