Good questions.
You might want to start looking at database::_apply_transaction (in db_block.cpp). Like all core code, this is in the libraries/chain module.
A few levels deeper you will see that for every blockchain operation there is an evaluator. Evaluators are grouped together in files, e. g. market_evaluator.cpp contains all evaluators for market-related operations.
It's a bit difficult to follow the execution paths. because some of the logic is hidden in static_variant objects that use the visitor pattern to find the relevant code for the specific object inside the static_variant. I'd suggest to skip over the static_variant stuff when reading the code, it's a bit tricky to understand.
Being a C programmer turned Java programmer turned C++ programmer myself, I'd like to warn you about a few traps. C++ reads almost like Java, but there are a few significant differences:
* Destructors are important in C++
* By default, methods are called by-value, not by-reference.
* Method lookup works differently in C++, in particular wrt overloaded methods.