What is the difference between registers, flip flops and latches?

Flip-flops are single bit devices with two stable states. The outputs are typically Q and \$\mathsf{\small \overline{\text{Q}}} \$. There are several kinds, here are probably the most common:

SR flops have two inputs, S (Set) and R (Reset). As they name implies, asserting either of these either sets or resets the flip-flop. After the input is de-asserted, the flip-flip retains it state. The inputs are usually negated, \$\mathsf{\small \overline{\text{S}}} \$ and \$\mathsf{\small \overline{\text{R}}} \$, i.e. 0 is the asserted state.

J-K flip-flops are similar to SR flip-flops, (with J being Set and K being Reset), but they have a third property -- if both J and K are set, then the flip-flop toggles.

D flips have a clock input, and when this clock rises (or falls, depending on the type), the D input is clocked into the flip-flop. Most D-flops also have the S and R inputs of a SR flip-flop.

Latches are the same as a flip-flop. Several latches can be combined in parallel to form a register. There will be inputs for each bit plus a clock. An 8-bit register used inside a microcontroller would hold a single byte. A 16-bit register would hold an address ranging from 0 to 65535 etc. Often a register will have a common reset lead.

Latches can also be combined in series to form a shift register, in this case there is a single input, and the output of one latch is fed into the input of the next on the rising or falling edge of a clock. The final output of the register can be used to feed into the input of another register. The shift register can also have individual inputs for each latch, so the register is both parallel and serial at the same time. This might be used for a register inside an ALU (arithmetic logic unit), that can do both arithmetic and logic operations, as well as shifting.