Why does the implicit copy constructor calls the base class copy constructor and the defined copy constructor doesn't?

前端 未结 3 1988
醉话见心
醉话见心 2020-12-12 17:25

Consider a class hierarchy where A is the base class and B derives from A.

If the copy constructor is not defined in B

3条回答
  •  时光说笑
    2020-12-12 18:06

    All base child constructors call the parent default constructor. This is how the standard is defined. As you pointed out if you wanted the derive class B to call A's copy constructor you have to explicitly ask for it

    #include 
    
    class A {
    int a;
    public:
    A() {
        std::cout << "A::Default constructor" << std::endl;
    }
    
    A(const A& rhs) {
        std::cout << "A::Copy constructor" << std::endl;
    }
    };
    
    class B : public A {
    int b;
    public:
    B() {
        std::cout << "B::Default constructor" << std::endl;
    }
    B(const B& rhs):A(rhs) {
        std::cout << "B::Copy constructor" << std::endl;
    }
    };
    
    int main(int argc, const char *argv[])
    {
    std::cout << "Creating B" << std::endl;
    B b1;
    std::cout << "Creating B by copy" << std::endl;
    B b2(b1);
    return 0;
    }
    

    This is so because the compiler can't know for each different constructor which constuctor of the parent should be called and hence we have the default constructors For all others you have to explicitly state them.

    Output:

    Creating B
    A::Default constructor
    B::Default constructor
    Creating B by copy
    A::Copy constructor
    B::Copy constructor
    

提交回复
热议问题