It would seem that testProg inherits from CCProg, and the no-args constructor for CCProg is being called from the initialization list of the testProg constructor.
Given that it is the no-args constructor that is being called, the explicit call isn't actually required (it would be called implicity anyway). Therefore the main use of this syntax would be to call a parent constructor that does take arguments.
For example:
testProg::testProg(int days) : CCProg(days)
{
m_UID = n_UID = 0;
}
Here, if the explicit call was left out, the no-args constructor would be called implicity if one were available, otherwise compilation would fail.
Note that it is also possible (though far less likely), that CCProg is the name of a member variable belonging to testProg - again, the explicit call to the no-args constructor is not required as it would be called implicity.