    #include <iostream>

    class Store {
        enum { MaxCount = 64 };
        float store_[MaxCount] {};
        size_t count_ = 0;
    public:
        // return the maximum number of elements we can store
        size_t capacity() const { return MaxCount; }
        // true/false: is the store empty?
        bool empty() const { return count_ == 0; }
        // return the current count
        size_t size() const { return count_; }

        bool add(float value) {
            if (count_ >= capacity()) {
                std::cerr << "store is full!\n";
                return false;
            }
            store_[count_] = value;
            ++count_;
        }
        // reset
        void clear() {
            count_ = 0;  // we don't actually need to change the store
        }
        // allow array-like usage
        const float& operator[](size_t index) const { return store_[index]; }
        float& operator[](size_t index) { return store_[index]; }
        // provide bounds-checked array-ish access
        float at(size_t index) const {
            if (index >= count_)
                throw std::invalid_argument("array index out of bounds");
            return store_[index];
        }
    };

    int main() {
        Store store;
        for (size_t i = 0; i < store.capacity(); ++i) {
            std::cout << "Enter number #" << i << " or -ve to stop: " << std::flush;
            float f = -1;
            std::cin >> f;
            std::cout << "\n" << f << "\n";
            if (f < 0)
                break;
            store.add(f);
        }
        std::cout << "You entered " << store.size() << " values:";
        for (size_t i = 0; i < store.size(); ++i) {
            std::cout << ' ' << store[i];
        }
        std::cout << '\n';
    }
