C++ 更改c+中的组合分类变量+;

C++ 更改c+中的组合分类变量+;,c++,class,combinations,C++,Class,Combinations,我有一个名为Factory的类,其中有一个名为balance的变量。我用它做了一个叫做f的对象。另一方面,我有一个名为Medicine的类,它必须在f中更改balance。我制作了两个名为med1和med2的Medicine对象 med1将f的余额增加10med2将f余额增加5。但是在f中,这些更改不会相互添加。 似乎每个Medicine对象都有自己的f副本 有没有办法将这些更改保存在f中 #include <iostream> #include <string> us

我有一个名为
Factory
的类,其中有一个名为
balance
的变量。我用它做了一个叫做
f
的对象。另一方面,我有一个名为
Medicine
的类,它必须在
f
中更改
balance
。我制作了两个名为
med1
med2
Medicine
对象

med1
f
余额增加10
med2
f
余额增加5。但是在
f
中,这些更改不会相互添加。 似乎每个
Medicine
对象都有自己的
f
副本

有没有办法将这些更改保存在
f

#include <iostream>
#include <string>

using namespace std;

class Factory
{
public:
    Factory() {};
    void addbalance(int x)
    {
        balance += x;
    }
    void show()
    {
        cout << balance;
    }
private:
    int balance = 0;
};

class Medicine
{
public:
    Medicine() {};
    Medicine(Factory f)
    {
        fact = f;
    }
    void addBalance(int x)
    {
        fact.addbalance(x);
    }
    void show()
    {
        fact.show();
    }
private:
    Factory fact;
};

int main()
{
    Factory f;
    Medicine medi1(f), medi2(f);

    medi1.addBalance(10);
    medi2.addBalance(5);
    f.show(); // I want here to show 15, not 0.

    return 0;
}
#包括
#包括
使用名称空间std;
阶级工厂
{
公众:
工厂(){};
无效余额(整数x)
{
余额+=x;
}
无效显示()
{

cout可以使用参考文献来完成

#include <iostream>
#include <string>

using namespace std;

class Factory
{
public:
    Factory() {};
    void addbalance(int x)
    {
        bal += x;
    }
    void show()
    {
        cout << bal;
    }
private:
    int bal = 0;
};

class Medicine
{
public:
    // now cannot be initialized without a Factory
    //Medicine() {};
    Medicine(Factory& f) : fact(f) // add & and initialize via member initialization list
    {
    }
    void addBalance(int x)
    {
        fact.addbalance(x);
    }
    void show()
    {
        fact.show();
    }
private:
    Factory& fact; // add &
};

int main()
{
    Factory f;
    Medicine medi1(f), medi2(f);

    medi1.addBalance(10);
    medi2.addBalance(5);
    f.show(); // I want here to show 15, not 0.

    return 0;
}
#包括
#包括
使用名称空间std;
阶级工厂
{
公众:
工厂(){};
无效余额(整数x)
{
bal+=x;
}
无效显示()
{

cout可以使用参考文献来完成

#include <iostream>
#include <string>

using namespace std;

class Factory
{
public:
    Factory() {};
    void addbalance(int x)
    {
        bal += x;
    }
    void show()
    {
        cout << bal;
    }
private:
    int bal = 0;
};

class Medicine
{
public:
    // now cannot be initialized without a Factory
    //Medicine() {};
    Medicine(Factory& f) : fact(f) // add & and initialize via member initialization list
    {
    }
    void addBalance(int x)
    {
        fact.addbalance(x);
    }
    void show()
    {
        fact.show();
    }
private:
    Factory& fact; // add &
};

int main()
{
    Factory f;
    Medicine medi1(f), medi2(f);

    medi1.addBalance(10);
    medi2.addBalance(5);
    f.show(); // I want here to show 15, not 0.

    return 0;
}
#包括
#包括
使用名称空间std;
阶级工厂
{
公众:
工厂(){};
无效余额(整数x)
{
bal+=x;
}
无效显示()
{

cout您必须创建变量balance一个静态变量,然后用类名和::operator调用它

您必须创建变量balance一个静态变量,然后用类名和::operator调用它,使用静态变量是危险的。如果您以后想使用不同的工厂,每个工厂都有自己的对于Medecine对象,使用静态变量是不可能的,而使用引用则可以。使用静态变量用于此用途是危险的。如果以后要使用不同的工厂,每个工厂都有自己的Medecine对象集,则使用静态变量是不可能的,而使用引用则可以。