The Separation of Interface and Implementation in C++

abstract A C++ class declaration combines the external interface of an object with the implementation of that interface. It is desirable to be able to write client code that depends only on the external interface of a C++ object and not on its implementation. Although C++ encapsulation can hide the implementation details of a class from client code, the client must refer to the class name and thus depends on the implied implementation as well as its interface.