To expand on the history of C++, yes it started as C with classes. In fact, the original C++ compiler implementations were a preprocessor to C compilers of the time.
Which is why C++ originally gained a notoriety for poor performance. The compiler technology would take years to improve. This is the same kind of myth and FUD applied to the Java vs. C++ argument today. In reality, Java can approach C/C++ performance in many areas (but not all). It's a mature platform, with some weaknesses (most notably Swing runtime look/feel/performance).
Also, if you're not a geek, you may not recognize that C++ is an attempt at geek humor.
From a skim of the replies, Descartes has probably the most honest and thoughtful information to share (not to say that some others didn't contribute as well).
One note about Java's allocation of objects on the heap. The way it's implemented in VMs is quite efficient, and has both the semantics and performance of stack-based allocation. If I were a hard-core geek, I'd have technical details or a link.

Go research JVMs yourself.
And one comment about C++ and OO. While standard C++ today can be programmed very much in an OO-style, the problem is that C++'s hybrid nature allowed it to be used in a functional programming style by many coders (even to this day). Note this was a design goal by Stroustrup. So in practical terms, it
could be considered a less pure OO language based on real-world usage. To program in a non-OO style in Java, you would have to program everything in a C-like syntax with only static functions, and not call any library routines (which are largely OO code). Definitely an extremely rare occurrence.
C++'s hybrid nature actually reminds me of the managed vs. unmanaged code issue in .Net. Since M$DN docs say it's safe to write unmanaged code, people will get the poor idea that they shouldn't write only managed code if they had a choice. Same thing with pointers; if they're there, they will be misused. In Java, there was a big campaign to promote "100% Pure Java", which arguably turned out to promote best practices for writing Java code. Also, it was recently reported that the VS.Net C# compiler has a bug allowing
buffer overflows in managed code. If this is corroborated as true, then .Net's much-touted security is
totally suspect.
In fact, you could even program C in an OO style, but since the language doesn't provide real support, it's much more difficult. Generally speaking, if the language provides meaningful support (classes, inheritance, polymorphism, dynamic dispatch, yada yada) to write code in an OO style, then it's considered an OO language.