Решение, которое вы нашли, подходит для случаев, когда вам нужно сохранить состояние (например, когда вы вычисляете число Фибоначчи, делаете что-то на его основе, а затем вычисляете другое), но использование этого из двух мест в вашем коде скорее всего даст смешные результаты. Это потому, что статические переменные всегда будут одинаковыми, независимо от того, откуда вы их вызываете. Я бы вместо этого предложил:
class FiboNumbers {
public:
FiboNumbers() :
x_(1), y_() {}
int getNext() {
x_ += y_;
y_ = x_ - y_;
return x_;
}
private:
int x_, y_;
};
Это обеспечивает такое же сохранение состояния, но позволяет создавать несколько экземпляров класса, что позволяет вам иметь разные части кода, которые вычисляют их собственные ряды Фибоначчи.
Незначительное примечание: код, который я разместил, будет производить ту же серию, что и пример, который вы опубликовали, но он создаст реальную последовательность Фибоначчи, которая начинается с 0 1 1 2 ...