You can use the editor to help you out, by going to file -> add code to project. You will get a list of different class types you can extend from with a brief description of what they do. There is also a complete engine and API specification available with a breakdown of every class, the data it contains and the functions.
Generally speaking, you should not modify core engine code, but rather extend it. For example, to create a new character class you would create AMyCharacter which extends ACharacter. This is because if you want to create a new project later on, and you’ve modified the engine with game-specific stuff, you’ll have a hard time undoing that work for the new project, or you’ll have to install a second copy of the engine.
As far as where to store data and functionality, that’s a design decision rather than a hard and fast rule. The basic rule of thumb is to store the data in the most logical place. So character health should be stored in the character class, current ammo in the weapon class and so on. That will then give you a basis to start understanding how objects should communicate with each other, how the HUD class can retrieve the player’s weapon’s current ammo for display purposes etc.