Operator overloading is very useful, when done properly. It can make things much easier to read and write. It's really easy to abuse, and then it can make things unreadable. In general, it takes a lot more knowledge and experience to use C++ safely than to use Java safely, but it's possible to express things better. (C++ has become much easier to use properly with C++11 and C++14 features, also.) One of Stroustrup's design principles was to keep features on the basis of how they could be used, not how they could be abused.
I really, really can't get excited about automatic getters and setters. Getters and setters are bad for encapsulation and promote unhealthy dependence on internals. I have no problems about writing them when I need them. (I do like the C# feature that allows me to have a virtual variable that has programming logic behind it.)