I was playing with overloading different operators and added print statements to watch what was happening. When I overloaded the post increment operator, I saw that the constructor was being called twice, but I don't understand why.
#include <iostream>
using namespace std;
class ParentClass {
    public:
    ParentClass() {
        cout << "In ParentClass!" << endl;
    }
};
class ChildClass : public ParentClass {
    public:
        int value;
        ChildClass() { }
        ChildClass(int a)
        : value(a) {  
            cout << "In ChildClass!" << endl;
        }
        int getValue() { return value; } 
        ChildClass operator++( int ) {
            cout << "DEBUG 30\n";
            this->value++;
            return this->value; 
        }
};
int main() {
    cout << "DEBUG 10\n";
    ChildClass child(0);
    cout << "value initial     = " << child.getValue() << endl;
    cout << "DEBUG 20\n";
    child++;
    cout << "DEBUG 40\n";
    cout << "value incremented = " << child.getValue() << endl;
}
The output after running this code is:
DEBUG 10
In ParentClass!
In ChildClass!
value initial     = 0
DEBUG 20
DEBUG 30
In ParentClass!
In ChildClass!
DEBUG 40
value incremented = 1
 
    