# C++ base classes
LAMMPS is designed to be used as a C++ class library where one can set
up and drive a simulation through creating a class instance and then
calling some abstract operations or commands on that class or its member
class instances. These are interfaced to the [C library API](Library),
which providing an additional level of abstraction simplification for
common operations. The C API is also the basis for calling LAMMPS from
Python or Fortran.
When used from a C++ program, most of the symbols and functions in
LAMMPS are wrapped into the `LAMMPS_NS` namespace so they will not
collide with your own classes or other libraries. This, however, does
not extend to the additional libraries bundled with LAMMPS in the lib
folder and some of the low-level code of some packages.
Behind the scenes this is implemented through inheritance and
polymorphism where base classes define the abstract interface and
derived classes provide the specialized implementation for specific
models or optimizations or ports to accelerator platforms. This document
will provide an outline of the fundamental class hierarchy and some
selected examples for derived classes of specific models.
:::: note
::: title
Note
:::
Please see the [note about thread-safety](thread-safety) in the library
Howto doc page.
::::
------------------------------------------------------------------------
::: {#lammpsbase .toctree caption="Individual Base Classes"}
Classes_lammps Classes_atom Classes_input
:::