|//opposite of default constructor because we destroyed Dummy * c???|
It's not the opposite of default constructor: we can have more than one constructor (but just one default one)
This is named destructor and it's called when an object is destroyed.
|//creation of object a caused default constructor to activate???|
When you create an object, one of the constructors are called, in your case you have just the default constructor, so automatically it's called that, which is responsible for allocating memory for the variables of the internal status.
//creation of object b sets static int n to 5 then increments n???
Actually you are declaring an array of 5 objects of type Dummy.
//destroying pointer to c returns value stored at &n to value prior to
//declaring pointer to c???
Every time you call a desctructor your are deallocating the memory occupied by the object on which you call the destructor.
If you create an object dynamically with raw pointers, you have also to delete manually the memory occupied by that object, and you call delete, you are actually calling the destructor, which decreases the value of the static variable "n".
//reflects the current value of static int n???
Yes, but you can access to a static variable even using an object created.
EDIT: Think about static variables as class variables, and not a variable of each single object you possibly can create. That means that 1 variable can be shared by many objects.