Machines read 0's and 1's. But it's difficult for humans to remember which combinations of 0's and 1's "do stuff" in a particular CPU. So we write stuff in assembly. Which makes it easier to write instructions. "move", "branch", "return", "add", etc. etc. (well, abreviated versions of these commands). These will be converted to 0's and 1's that the CPU can understand.
C/C++ abstracts these another level and it also generates programs that can be understood by the CPU.
So,
assembly -> binary code (0,1)
C++ -> binary code (0,1)
There are things that you can do with assembly that is tough to do with C/C++. This is in the realms of operating system design and embedded systems. But overall, C/C++ is very powerful. Using assmebly to make everything is a difficult task. B/c it's difficult to keep track of what you are doing. In another 200 years, like in star trek, we will say "Computer, make an environment that has a huge waterfall". It's all about abstraction.
Operating system was also make using C/C++ and assembly, etc. and exists in machine code (0,1). The CPU will "run the OS" and the "OS" will "let" other programs run at the appropriate time getting out of the CPU and letting the program use it (in the simplistic sense).