Push-pull amplifiers  are great for driving heavy loads because they divide work among two transistors and produce a centred output signal that can freely move up or down around the centre.
When powering the amplifier with a single power source (eg. a 12V battery), then the output signal oscillates around half that voltage.
If we want to drive a load like a speaker, we have to get rid of the DC aspect of that signal with a capacitor, otherwise there would be a large DC current on top of the signal, blowing up our speaker.
This creates two issues:
- if we’re driving an inductive load (like a speaker coil), the capacitor and coil will create an LC oscillator which leads to a non-linear response
- the capacitor actually reduces the amount of power that a load can draw from the amplifier
Both these issues can be solved if we drive one side of the load with the signal and the other side of the load with an inverted signal. This raises both sides of the load to the same baseline voltage so that there is no DC current in the load; the opposite oscillation of signals on both sides of the load create a clean AC current through the load.
By the way, there is a simple way to invert a signal with an op-amp. I won’t go into details regarding its operation in this post – maybe some other time 🙂 The purpose of signal inversion is to drive the opposite push-pull stage in the previous circuit.
Cross over distortion
Surprisingly, the output signal looks distorted  which is due to the transistor threshold voltage. There are ways to reduce distortion by applying a voltage to the base to overcome the threshold voltage, but that requires careful calculations – and if anything, I’m an experimentalist and don’t trust my own calculations.
There is a rather elegant way to correct output distortion with operational amplifiers. When operated in a feed back loop, an op-amp will compare an output to an input and compensate for any differences. So, if we feed the op-amp the input signal and the output signal produced by the push-pull amplifier, the op-amp will produce an output that compensates for any distortions in the push-pull amplifier.
Putting it all together
The final circuit consists of two opposing push-pull pairs, driven by two op-amps which correct output distortion and an op-amp which inverts the signal for the second push-pull pair.
As always, you can try out the circuit in the online simulator on Lushprojects 
 Push-pull output
 Circuit on Lush Projects