I am working on some software where I have three different cases. I want it so when the push button is pushed the first time, the first routine occurs. Then when pushed again, the second routine and then the third. After the third routine I want the counter to reset to 0. And then start over again.

I conceptually understand how I want to do it, but I can't think of how to program it correctly. I am an EE lol software is not my expertise.

You might think so but due to the use of the conversion operator 'operator uint8_t()' it can, and does, work just fine.

In most cases, operators are defined to make a class behave in a manner that the users expect. For instance, one would, in a string class, overload the + operator, or, for a list class, one would overload the {} operator.

I don't see a reasonable use for the () operator in a button class. One does not expect an instance name by itself to be equivalent to a function call. Adding a method to the class, with a meaningful name to get that value returned by the () operator is a MUCH better idea, in my opinion.