提问者:小点点

C++中组合类变量的更改


我有一个名为factory的类,其中有一个名为balance的变量。 我用它创建了一个名为f的对象。 另一方面,我有一个名为Medicine的类,它必须更改F中的Balance。 我制作了两个medice的对象,分别命名为med1med2

med1f余额加10。 med2fbalance加5。 但是这些更改在f中并不相互添加。 似乎每个medice对象都有自己的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;
}

共2个答案

匿名用户

它可以使用引用来完成。

#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;
}

匿名用户

您必须将变量balance创建为一个静态变量,然后用类名和::运算符调用它

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中|组合|类|变量|更改)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?