Here are my answers. Let me know if any changes should be made. Thank you!
- A function should have the ‘virtual’ keyword when you plan on it being inherited and overwritten by another contract
- A function should have the ‘override’ keyword when within an inheriting contract and is overwriting a ‘virtual’ function from the base contract
- A function would have both keywords when modifying a base ‘virtual’ function as well as planning on being inherited and modified by another contract