Put the header content into a text file and load it into a variable:
cd ~/temp/
nano h.txt
h=$(<h.txt)
And run this command:
# Turn on recursive globbing and extended globbing and have patterns that
# fail to match expand to an empty string
shopt -s globstar extglob nullglob
for f in **/*.@(h|cpp); do
# Add the contents of the variable h at the beginning of the file
# Note: no lines in $h should be just a period as that signals end of
# text input mode.
ed -s "$f" <<EOF
1i
$h
.
w
EOF
done
it also adds missing newlines at the end of the files.