Two main points:
#1: OOP programming languages are a fad, and to many programmers, a religion.
#2: A great many programs and applications can be written without objects of any kind.
Having said that, I'll make a couple personal comments.
#1: I absolutely loathe OOP programming languages.
#2: Most but not all the programs I write are chock full of object oriented aspects.
Are you shaking your head in disbelief yet?
Perhaps the best way to explain this [perhaps] seeming contradiction is the following. I absolutely loathe other people telling me what to do, and how to do so. I absolutely loathe other people forcing me to do things "their way". I also absolutely loathe putting application-specific mechanisms in programming languages. I also absolutely loathe "hiding", which is not absolutely necessary in an OOP programming language, but they all are (that I know of). I also absolutely loathe staring at code that I can't understand without needing to read 65536 to 4-billion lines of header files and other code. I also absolutely loathe completely bogus, unreadable, incomprehensible operators... instead of completely readable, comprehendable function names. I also absolutely loathe having 50,000 code libraries that don't work together, and have 148,000 "approaches" (yes, sometimes several approaches per code library).
Shall I continue? Because I could continue for hours!
Here is another very relevant way to express the above. My programs are chock full of object-oriented aspects, and I have no trouble whatsoever implementing those aspects myself in conventional C code. And when I do implement OOP aspects in my programs, my programs remain completely readable and easy to comprehend. I also don't need to learn enormous quantities of obscure syntax and methodologies (that are often not applied uniformly by everyone). I can implement OOP aspects in plain old C code quite happily, BTW. And each is appropriate to what I need to accomplish, not some attempt to hyper-generalize until cows turn into leptons, making everything sooooo general that it is chock full of clutter (required to be ultra-general), chock full of hidden or difficult-to-learn assumptions (sometimes to make hyper-generality even possible or workable).
KISS. Keep it simple, stupid!
I can do everything... EVERYTHING... with C that anyone else can do with C++, and my code will be simpler, faster, more readable, more reliable, easier to modify, easier to collaborate with others, easier to document, and just plain better.
The short answer is, I can do absolutely everything with:
Did I forget something? Probably one or two. Maybe you don't think of "structures" as being variables. Maybe you don't think of "structure declarations" as being "types". You can argue the C language contains a few more kinds of gizmos, but frankly, very few.
????? WHAT DOES THIS MEAN ?????
This means I only need to know (or remember) how statements work, how variables work, how operators work, how functions work... and THAT IS ALL.
Well, guess what, noobies? If you do everything with only half a dozen very simple and fundamental mechanisms... ALL DAY, EVERY DAY... you not only learn them thoroughly... you habituate them very quickly and thoroughly, so they become like "how to breath". You do not forget! You do not get confused. You don't need 37 ways to walk, you just freaking walk.
And how about interoperation? How about implementing code libraries?
They are pretty much all exactly the same. They are a huge pile of functions. PERIOD. Everything works the same, because they are all functions, just like the functions in your own programs, and just like the functions in other libraries. And when you look at a function declaration, you understand it. Some arguments are inputs, some arguments are outputs (the arguments passed by address without "const"). And you KNOW how every single one of them is passed... either the value of the variable is passed, or the address of the variable is passed. Just look at the type of each argument. The value of "int" or "double" or any other type argument is passed directly. If you see one or more "*" as part of the typename in function declarations, you know the address (or the address of the address, etc) of the argument is passed. So argument type "int*" means the argument is an address (pointer-to) an int. And so forth. You know what's happening. With C++, you don't even know what a reference type is, because they reserve the right to hide and obscure that (and millions of other aspects of "what's going on" under the covers where you cannot see, or even if you can, it may change next Tuesday).
I'm gonna stop here, because I know there are already at least 256 hit men trying to figure out who I am, so I can be "taken out" for my atheistic views of the world, and especially for wanting my life to be simple, yet utterly flexible. Religious freaks hate thinking like mine.
Just for the record, I learned C++ before C. I just hated C++ so much, I decided to give C a try. It was like removing 65536 scorpion stingers from my brain! What a freaking relief!!! You cannot even imagine.
Nonetheless, the fact of the matter is, humans can learn, habituate and even love just about anything, including horrific abuse. So if you do learn to program in C++, you'll eventually habituate some way of doing things in C++ (there are about 143-million ways, and roughly 1 way to do things in C, not counting trivia like "which style comments do you prefer").
BTW, if there are any advantages to C++ (and I'm sure someone can concoct some convincing-on-the-surface examples), the totality is absolutely, definitely, certainly much more complex and problematic with C++. Best things about C is... it works the same for 30 years, and it will work the same for another 30 years unless some C++ lover decides to "destroy C from within".
Perhaps the biggest lie of all is... C++ is better for "large programs" with "lots of contributors". Boy is that the opposite of true! Holy smokes! You know how to know this is a total line of BS? Easy. Do you think a group of programmers who do everything with 6 simple mechanisms ALL THE TIME (with zero to nothing hidden away out of sight) can work together and understand each others code easier than a group of programmers who adopt varying subsets of 87 mechanisms and 93 non-compatible class libraries? Hahaha. You guess! The additional proof is this. The way to write good, solid, reliable C programs is the same today as 20 years ago. The way to write good, solid, reliable C++ programs has not been invented yet, but thousands of people (who claim C++ is the greatest thing since sliced bread) will swear on a stack of bibles that THEIR WAY is the best way in the history of the universe. Decide for yourself which you suspect is true.
And good luck! You're gonna need it!
PS: If you love to be loved, and hate to be laughed at... you must adopt C++. That's for certain. If you just want to write great code that works for years, and interoperates easily, well, prepare to be hated and vilified by the most vocal self-proclaimed programmers on planet earth.