You can define a copy constructor for a class. If you do not define a copy constructor and one is required, a default copy constructor is defined. If you do not define a copy constructor, and one is not required, a default copy constructor is declared but not defined. If a class has a copy constructor defined, a default copy constructor is not generated.
Copy by initialization is used only in initialization.
You can define a copy constructor for a class with a single
argument that is a constant reference to a class type only if all
its base classes and members have copy constructors that accept
constant arguments. For example:
class B1 { public: B1(const B1&) { /* ... */ } };
class D: public B1 { public: D(const D&); }; D::D(const D& dobj):B1(dobj) { /* ... */ }
Otherwise, you can define a copy constructor with a single
reference to a class type argument. For example:
class Z { public: Z(Z&); }; Z::Z(Z&) { /* ...*/ }
The default copy constructor for a class is a public class member.
Initialization by Constructor
Constructors
Copy by Assignment