In assignment operator, you are assigning a value to an existing object. But in
copy constructor, you are creating a new object and then assigning a value to that
object. For example:
c1=c2; //this is assignment
complex c3=c2; //copy constructor
A copy constructor is used to initialize a newly declared variable from an existing
variable. This makes a deep copy like assignment, but it is somewhat simpler:
There is no need to test to see if it is being initialized from itself.
There is no need to clean up (eg, delete) an existing value (there is none).
A reference to itself is not returned.