First, this has nothing to do at all with object-oriented programming. You have exactly the same problem with plain old function calls, and the problem is that if a parameter is just "true" or "false", then the reader of the code has no chance to figure out what the code does, except if it is the only parameter of a suitably named function: object->setVisible(true) is absolutely fine.
There are languages where parameters are named in a call. For example, object.setOptions (visible: true, opaque: false, animated: true) is again fine. But object.setOptions(true, false, true) is a big problem, because just reading that line of code I have no idea what is happening. I don't know what the parameters are, and definitely no idea of their order. In this case, using an enum and calling object.setOptions(eVisible, eTransparent, eAnimated) is fine again. Enums, not constants set to boolean values.
What's worse is that not only do I not know what your code means, the compiler can also not help you if you get it wrong. object.setOptions(false, true, true) will compile just fine and give completely wrong results. object.setOptions(eTransparent, eVisible, eAnimated) will hopefully not compile, so you can immediately fix your problem.