Seeking proficiency in C++ or in OOP in general would either have to be a result of obtaining the necessary knowledge in order to browse through the code-base of the flight controllers that you mentioned, or with the eventual goal that this is what you would use when implementing your own flight controller.
The first thing is familiarizing yourself with the syntax and semantics of the language(s) used in the implementation of the flight controllers that you're interested in adjusting. The tricky part is actually determining what the code is doing. It helps if the code base is well documented and that the code is developed in a concise manner. For example, the functions and variables are named appropriately so that their purpose is clearly understood. Otherwise be prepared to follow through the logic of the code.
Once you have that down, one of the efficient ways when trying to decipher what the code is doing is to start from the beginning. Look for where the program starts when the flight controller is first turned on or is commanded to start executing whatever it needs to execute. Also what sort of initialization is it doing. Another thing is what sort of communication protocols that might be in play if the flight controller were to communicate with others. And then just work from there.
Ignoring the details for now, the sole purpose of a flight controller is really to monitor and control the whole system and possibly relay any information to others perhaps a ground station of something. This means having the knowledge of the sort of hardware/sensors/etc. that you need and need to be physically present in order to obtain the required data and make sense of it. Based on the data this will determine how the quadcopter should behave/maneuver.
As for wanting to implement your own flight controller it depends on what you are seeking. Are you looking to take the existing flight controllers and replace the program installed in its entirety or are you looking to design and build your own flight controller platform and then create your own flight controller code.
- For the first case, look at the related documentation/datasheets of the flight controller at interest. In particular see if it's possible to make your own adjustments to the flight controller code.
- For the second case, you might want to look into embedded systems development.