system
Given the following post, respond as if you're commenting on Reddit:
human
ELI5: What makes C++ a better language than C? Or in other words, what are all the advantages of Object-Oriented Programming?

My main hurdle is that I don't understand *why* it's beneficial to combine data with code.  I'm having a hard time understanding why a programmer would want to make the paradigm switch and what the advantages are.  I have a small background in C and every explanation I've heard for C++ leaves me scratching my head.
gpt
Object-oriented helps keep track of things in a logical, reusable, and extendable structure.

Think about a video game.  In a video game, there are plenty of characters on the screen.  Every character has a model and a location in the world.  With classes, you can make a "character" class that holds all that character-specific data in an easy-to-use template.

**TL;DR 1:** It's like keeping all the contact information for your friend in a single contact card on your phone.

Every time you create (aka, "instantiate") a character in the game world, the class constructor will automatically fill in all the data and keep it together in a single, logical object.  In C, this same data would probably be stored in one or more arrays.  While that works most of the time, if there's a logic bug in your program, you might find yourself reading the wrong data (off-by-one errors) or possibly reading a location that isn't real data at all (reading a character's location after it was already removed, for example).  These bugs can be nasty and hard to find.  With objects, the data for each character is contained in a single object, so all the correct data is in a single place, and only exists if the object still exists.

**TL;DR 2:** Since the entire contact card is displayed at the same time, you won't accidentally dial Taco Hut when trying to call your friend.

Secondly (and this is very important for large projects), it helps keep code organized.  You might know where all the arrays and variables that keep track of a character's inventory are, but unless he worked with you in designing it, Steve might not.  If Steve has to make a change to your code to add his code for equipping larger backpacks, he'll have to hunt down all the inventory code or ask you to explain it.  While proper code organization can prevent problems like that, object-oriented code *forces* you to write it organized in smaller logical chunks, making such techniques less necessary.

**TL;DR 3:** By it's very nature it keeps your contacts organized, so when you loan your phone to a friend, they can always figure out how to navigate the contacts screen easily.

Finally, techniques like inheritance and encapsulation promote code reuse and more general solutions.  Instead of writing code multiple times for chests, characters, and vehicles to all store items, you can write a single "inventory" class and extend it.  That gives the three very different objects a common interface that the item team can rely on when they need to add or remove an object from an inventory.

**TL;DR 4:** It promotes common, generic formats.  You can add an email field to a contact card and your email program will be able to recognize it, regardless of whether it's a phone contact, an email contact, or something else entirely.

Basically, it's a layer of organization on top of the base code that helps keep track of things, especially in huge projects.  It's also easily extendable, allowing you to reuse a lot of code rather than re-typing it all.