You are already familiar with the OEMol, which you have learned is a concrete class which can support the OEMolBase API and can be passed to functions which take an OEMolBase as an argument. In the following chapters, you will discover that an OEMol provides the API of the OEMCMolBaseT class in addition to that of the OEMolBase. Further, an OEMol can be passed to any function which takes either and OEMolBase or an OEMCMolBaseT as an argument.
An OEGraphMol is an additional concrete class similar to the OEMol which provides access to only the OEMolBase API. An OEGraphMol can be passed to any function which takes an OEMolBase argument, but not to a function which takes an OEMCMolBaseT argument. A OEGraphMol does not inherit from OEMolBase. This is analogous to an OEMol not inheriting from an OEMCMolBaseT. In both cases, this is for efficiency.
Simplistic OEChem inheritance scheme: OEBase | | OEMolBase ---------------- OEGraphMol | | OEMCMolBaseT ------------- OEMol <- indicates inheritance -- indicates API correspondence without inheritance
Now a programmer has two OEChem molecules to choose among, the OEMol and the OEGraphMol. As you have already learned, an OEMol supplies the entire API supplied by the OEGraphMol, so if there is any doubt which molecule to choose, the OEMol is a safe choice. However, in instances when you are certain that the code you are writing will never need to manage molecules with multiple conformations, it is safe (and can be more efficient) to use an OEGraphMol.
To this point, our discussion of molecules has neglected to cover the API provided by the OEBase class. This will be covered in subsequent chapters.