- When should you put the virtual keyword on a function?
When it can be overridden by an inheriting contract.
- When should you put the keyword override on a function?
On the function that overrides the base function.
- Why would a function have both virtual and override keywords on it?
When the function overrides the base function and can still be overridden again. Like the transfer function.