The `PtMatrix` base class is derived from the `Message` class so the programmer can work with matrices using `Envelope` class and message-handling system.

However, the `MessageParticle` class is not used by the `PtMatrix` class. Instead, there are special `MatrixEnvParticle` classes defined to handle the type checking between the various types of matrices. This allows the system to automatically detect incorrect connections between two primitives with different matrix type inputs and outputs. Also, the `MatrixEnvParticle` class has some special functions not found in the standard `MessageParticle` class to allow easier handling of `PtMatrix` class messages. A discussion of how to pass `PtMatrix` class objects using the `MatrixEnvParticle` can be found later in this documentation.

There are currently four data-specific matrix classes: `ComplexMatrix`, `FixMatrix`, `FloatMatrix`, and `IntMatrix`. Each of these classes stores its entries in a standard C array named `data`, which is an array of data objects corresponding to the `PtMatrix `type: `Complex`, `Fix`, `double`, or `int`. These four matrix classes implement a common set of operators and functions. In addition, the `ComplexMatrix` class has a few special methods such as `conjugate()` and `hermitian()` and the `FixMatrix` class has a number of special constructors that allow the programmer to specify the precision of the entries in the matrix. As a rule, all entries of a `FixMatrix` will have the same precision.

The matrix classes were designed to take full advantage of operator overloading in C++. The result is that matrix objects can be written much like operations on scalar ones. For example, the two-operand multiply operator `*` has been defined so that if `A` and `B` are matrices, `A*B` will return a third matrix that is the matrix product of `A` and `B`.