It's not that there's a problem with C++'s OOP. It's that OOP itself is the problem.
Alexander Stepanov, author of the STL component of the Standard C++ Library has this to say:
Yes. STL is not object oriented. I think that object orientedness is almost as much of a hoax as Artificial Intelligence. I have yet to see an interesting piece of code that comes from these OO people. In a sense, I am unfair to AI: I learned a lot of stuff from the MIT AI Lab crowd, they have done some really fundamental work: Bill Gosper's Hakmem is one of the best things for a programmer to read. AI might not have had a serious foundation, but it produced Gosper and Stallman (Emacs), Moses (Macsyma) and Sussman (Scheme, together with Guy Steele). I find OOP technically unsound. It attempts to decompose the world in terms of interfaces that vary on a single type. To deal with the real problems you need multisorted algebras - families of interfaces that span multiple types. I find OOP philosophically unsound. It claims that everything is an object. Even if it is true it is not very interesting - saying that everything is an object is saying nothing at all. I find OOP methodologically wrong. It starts with classes. It is as if mathematicians would start with axioms. You do not start with axioms - you start with proofs. Only when you have found a bunch of related proofs, can you come up with axioms. You end with axioms. The same thing is true in programming: you have to start with interesting algorithms. Only when you understand them well, can you come up with an interface that will let them work.
Name:
Anonymous2011-09-11 2:51
There are two ideal kinds of OOP that are quite different from one another: multimethods, and message-passing. They are best exemplified by Common Lisp and Smalltalk, respectively. In ways, C++ is more like multimethods and Objective C is more like message passing.
Except that objective C does a decent job emulating Smalltalk, and C++ does an absolutely horrid and terrible job emulating CLOS.
Java and C# were then inspired by C++, not the venerable progenitors of OOP, and so now OOP has completely lost face because nobody even remembers what the hell it is.