My language of choice for any large project I work on is generally C++, with OpenGL as the basis for the graphics. This choice was originally made for me by the fact that it is the main language used for in the classes on my degree course. Although after working with a couple of other languages, I’m glad that C++ has become my main language as I often get frustrated with some of the limitations evident in other languages, especially operator overloading.
I know that proponents of languages such as Java argue that operator overloading causes poor, hard to read code, however when you’re working with objects that have a mathematical basis, such as vectors, it makes sense to overload the arithmetic operators. Obviously vectors are a very basic example, but the theory still holds. Opponents will argue that even though there may be certain occasions where it’s useful, the fact that C++ allows the user to overload the operator in any way, no matter how counter-intuitive, makes it wrong. However if your the kind of programmer who would do that you should probably stick to Java anyway. I rarely use operator overloading, probably only in one or two projects, and even then I kept it simple and clear, applying it solely to mathematical objects, however rarely is not never, and so when I first started working with Java and set of to write a small custom Vector class I very quickly got frustrated with the lack of operator overloading.
Just because a language allows you to to do something, doesn’t mean you have to use it. C++ also allows true multiple inheritance, and if anyone working on a project with me tried to implement it, i would probably have them taken out back and shot ( unless they had a very good reason for it, but even then…), but that doesn’t mean you don’t use C++. It means you use it carefully, and if someone on your team can’t, then replace them.