IUnknown, the Genesis of All Interfaces

COM objects implement interfaces. When you get a handle, or pointer, to a COM object, you only see an interface. In C++, you get a pointer to an abstract base class. Through that pointer, you can only call methods on the object. You cannot access any of the object's implementation-related members, which are in derived classes that you do not see. In this manner, COM separates the interface from the implementation. Users, or clients, of interfaces see only the interfaces and never the implementation.