A virtual function is a method that does not have a definition when defined in the base class. This method is left black in the parent class and it is redefined in the child class.
An abstract class is a class that has abstract members or at least one pure virtual function in its definition. An abstract class can never be instanced (creating an object). It can only be inherited and the methods could be overwritten.
Yes, These are legal in C++, but these are destructors are for base class instead of the child class.
No, It is not always mandatory to redefine a virtual function. It can be used as it is in the base class.
Constructors cannot be virtual, because they need to be defined in the class.