KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Consider a class hierarchy where A is the base class and B derives from A . If the copy constructor is not defined in B , the compiler will synthesize one. When invoked, this copy constructor will call the base class copy constructor (even the synthesized one, if none has been provided by the user). #include <iostream> 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; } }; 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; } Output: Creating B A::Default constructor B::Default constructor Creating B by copy A::Copy constructor If the user defines its own copy constructor in B , when invoked, this copy constructor will call the base class default constructor , unless a call to the base class copy constructor is explicitly present (e.g. in the initialization list). #include <iostream> 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) { std::cout << "B::Copy constructor" << std::endl; } }; int main(int argc, const char *argv[]) { std::cout << "Creating B" << std::e
Tags (comma-separated)
Save Edits
Cancel