调用C++类中不同函数时类中私有成员的变化问题,求解。

代码如下:


#include<iostream>
using namespace std;

class Test {
private:
    int i;
    double j = 0;
    double arr;
public:
    double ArrofK(int n,int k) {
        double sum = 0;
        for (i = 1; i <= n; i++)
        {
            if (i % k == 0)
            {
                sum += i;
                j++;
            }
        }
        arr = sum / j * 1.0;
        return arr;
    }
    double ArrofNK(int n,int k) {
        double sum = 0;
        for (i = 1; i <= n; i++)
        {
            if (i % k != 0)
            {
                sum += i;
                j++;
            }
        }
        arr = sum / j * 1.0;
        return arr;
    }
};

int main()
{
    int n, k;
    cin >> n >> k;
    Test t;
    cout << t.ArrofK(n, k) << " " << t.ArrofNK(n, k) << endl;
}

输入
100 16
运行结果为
3.36 50.1459

我知道这个代码出错了,但奇怪的是当我把
cout << t.ArrofK(n, k) << " " << t.ArrofNK(n, k) << endl;
改为
cout << t.ArrofNK(n, k) << " " << t.ArrofK(n, k) << endl;

运行结果变成了
4.714 56
都是后面对了,前面错了,我个人认为是私有成员j出错了,但是不应该是前面对,后面错吗?求解。

因为cout中的表达式计算顺序是:从右到左,输出顺序是:从左到右,跟C语言中printf函数一样。
如有帮助,请采纳一下,谢谢。

没错啊。在fK函数会加到6,而在fNK函数j初始也是6,然后被加到100了,在fNK中sum 等于5050减(16,32,48,64,80,96)了。所以是47.14

为什么要把i、j这些方法级变量设置成类成员变量啊?互相影响,如果想用,就在私有方法中使用前设置初值j =0