OOP (classes) are great and what every modern language (which excludes C++) use. C++'s implementation is a piece of crap, especially given the language can be used as mix of procedural and object-oriented. Java and C# require everything to be object-oriented.
Of course.. For one, the C++ ANSI standard is not followed very well. You have Visual C++, GTK, etc... Everyone has dipped their hands in the pot and "optimized" the honey. You have people releasing libraries that don't follow conventions and redo what the OS is supposed to instead of letting the OS handle things. This is why it takes forever and a day to port an application from one OS to another, why there are UI consistency issues in ported applications and a whole mess of other problems like memory leaks, buffer over/under runs and just things being a royal pain in the patookus.
With Java and C#, you don't have that as they are controlled by a single entity. Companies with long histories of developing and providing development environments. They have taken what works in C++ and fixed what is broken. They have learned from the mistakes of the past to provide languages that are closer to being truly cross-platform.
However, if you do learn C/C++ then you have the basis for future languages. Combine this with some good coding practices (comments, logical naming, freeing objects explicitly, etc...) then you can easily have a fulfilling lifelong career. If you go to a development house with just Java and C# on your resume today, you will have a hard time getting a job. Might change in 5-10 years but then there will be a new flavor of the month language that comes along.
That said, I am personally teaching myself C# right now. Did C/C++ programming for 10 years, went to school for that but it is time for me to move on. C# fits the bill for my personal development project which is maintaining one or more stores (online and offline) from a central location over a VPN connection.