C++ Code Example: compile-time polymorphism (operator overloading)

#include <iostream>
using namespace std;

class IncrementOperator {
    private:
        int day, week;
    public:
        IncrementOperator() {
            day = 0;
            week = 0;
        }

        IncrementOperator(int d, int w) {
            day = d;
            week = w;
        }

        IncrementOperator operator++() {
            ++day;
            while (day >= 7) {
                ++week;
                day -= 7;
            }
            return IncrementOperator(day, week);
        }

        void print() {
            cout << week << " week, " << day << " days" << endl;
        }
};

int main() {
    IncrementOperator obj1(5, 2);
    IncrementOperator obj2(14, 0);
    ++obj1;
    ++obj2;
    obj1.print();
    obj2.print();

    return 0;
}
Output
2 week, 6 days
2 week, 1 days