Frequently copy constructors do a 'deep copy' of the object. In a deep copy, when an object contains a pointer, a new copy of whatever the pointer points AT is created and the new object contains a pointer to the newly created copy of the item. If you carry out a shallow copy you end up with two pointers to the same item. If that item is an object with a destructor, this generally means you'll end up calling the destructor for that item twice, which will generally cause problems. Notice the subtle difference.
Assignment changes an existing object while construction creates a new object.
You can view assignment as the applica- tion of a destructor, to flush away the existing object, followed by a copy construction, to make an exact copy of the assigned object. An Abstract Base Class is a class that is not intended to be instantiated itself. Rather, it is intended strictly for use as a base for other classes. To prevent instantiation, an ABC will typically contain at least one pure virtual function. The point of an ABC is to separate the interface of a group of classes from the implementation of the functions that make up the interface.