This exercise asks you to write a program to simulate and manage chess games. Your program will be expected to validate each move and keep track of the state of the game, detecting when the game is over and producing appropriate output to the user. You should implement your program and its components in an object oriented manner using C++ classes and inheritance.