Calling a constructor of the base class from a subclass' constructor body

前端 未结 4 1536
感动是毒
感动是毒 2020-12-15 10:07

I was under impression that it\'s impossible, see for example: Calling the constructor of the base class after some other instructions in C++
But the following program

4条回答
  •  醉梦人生
    2020-12-15 10:40

    The call inside the child class constructor is not calling the base class constructor, it is creating a temporary, unnamed and new object of type Person. It will be destroyed as the constructor exits. To clarify, your example is the same as doing this:

    Child() { c = 1; Person tempPerson; }
    

    Except in this case, the temporary object has a name.

    You can see what I mean if you modify your example a little:

    class Person
    {
    public:
        Person(int id):id(id) { std::cout << "Constructor Person " << id << std::endl; }
        ~Person(){ std::cout << "Destroying Person " << id << std::endl; }
        int id;
    };
    
    class Child : public Person
    {
    public:
        Child():Person(1) { c = 1; Person(2); }
    int c;
    };
    
    int main() {
    Child child;
    
    Person(3);
    return 0;
    }
    

    This produces the output:

    Constructor Person 1
    Constructor Person 2
    Destroying Person 2
    Constructor Person 3
    Destroying Person 3
    Destroying Person 1
    

提交回复
热议问题