Arduino language is officially called "Wiring" and is a carefully-crafted subset of both C++ and Java and sketches are supposed to work in either. (the IDE automatically adds forward function declarations for C++
This is wrong. The Arduino Language is officially called "the Arduino Language"
(1)It is based on the Wiring Language defined as part of Hernando Barragán's Master's Thesis
(2)Neither the Arduino Language nor the Wiring Language contain any Java, although they were influenced by "The Processing Language"
(3) (which is Java), and have similar abstractions, elimination of build complexities, and rejection of the standard libraries.
While they'd apparently like to believe otherwise, the Arduino and Wiring Languages are both C++, though without the C++ STL or even normal C++ libraries (depending on actual chip, actually.) They do some trivial pre-processing to generate forward declarations, and then run the standard avr-gcc/avr-g++ compilers. And they have their own set of "standard" library functions (although avr-libc and/or newlib-nano are present as well.)
(4)You can also include plain C/C++ files in your Arduino projects, and the IDE will handle them fine (just with less pre-processing.) (And within the limits of the C++ libraries and features available from the particular compiler.)
A good C book is a fine place to start, if you want to understand Arduino code.