Virtual Functions
If base and derived classes have their own versions of a function, making the function virtual lets the program automatically decide at run-time which version of the function to use!
Without the virtual keyword, the function call is decided at compile-time based on the declared type
A virtual function must remain virtual throughout the entire class hierarchy