如何重置函数内的静态结构

时间:2015-10-27 20:17:40

标签: c++ function struct static

所以我想说我有一个功能

struct coinTypes {
    int tenP = 0;
    int twentyP = 0;
    int fiftyP = 0;
};

coinTypes numberOfCoins(int coins)
{

    static coinTypes types;

    // incrementing structs values
}

假设我已经使用了这个函数一段时间了,而且coinTypes结构中的值不再是0.然后我决定将此函数用于其他目的,我需要将值再次设置为0。有没有办法重置coinTypes struct?

2 个答案:

答案 0 :(得分:0)

在这种情况下不要使用静态。尝试使用: 具有对象参数的类硬币coinType,例如couinNumber。

答案 1 :(得分:0)

除非你只是误解关键字static的作用(你可能是),否则这就是你要求的:

run online

#include <iostream>

struct britishCoins {
    int tenP;
    int twentyP;
    int fiftyP;
};

britishCoins& getCoins () {
    static britishCoins coins {0, 0, 0};
    return coins;
}

void resetCoins () {
    getCoins() = {0, 0, 0};
}

britishCoins numberOfCoins(int coins)
{
    britishCoins& result = getCoins();
    result.tenP += coins / 10;
    //...
    return result;
}

int main () {
    std::cout << numberOfCoins(0).tenP << std::endl;
    std::cout << numberOfCoins(10).tenP << std::endl;
    std::cout << numberOfCoins(10).tenP << std::endl;
    std::cout << numberOfCoins(10).tenP << std::endl;
    std::cout << numberOfCoins(10).tenP << std::endl;
    resetCoins();
    std::cout << numberOfCoins(0).tenP << std::endl;
    std::cout << numberOfCoins(10).tenP << std::endl;
    std::cout << numberOfCoins(10).tenP << std::endl;
    std::cout << numberOfCoins(10).tenP << std::endl;
    std::cout << numberOfCoins(10).tenP << std::endl;
    return 0;
}

打印:

0
1
2
3
4
0
1
2
3
4

如果您只想将int coins转换为britishCoins而不将其值存储在函数中,则很简单:

run online

#include <iostream>

struct britishCoins {
    int tenP;
    int twentyP;
    int fiftyP;
};

britishCoins numberOfCoins(int coins)
{
    britishCoins result;
    result.fiftyP = coins / 50;
    coins %= 50;
    result.twentyP = coins / 20;
    coins %= 20;
    result.tenP = coins / 10;
    return result;
}

int main () {
    for (int i = 0; i < 3; ++i) {
        britishCoins coins = numberOfCoins(130);
        std::cout << coins.fiftyP << "*50 + " << coins.twentyP << "*20 + " << coins.tenP << "*10" << std::endl;
    }
    return 0;
}

输出:

2*50 + 1*20 + 1*10
2*50 + 1*20 + 1*10
2*50 + 1*20 + 1*10