Классы-оболочки C++ переопределяют операции преобразования типов, присваивания, индексирования, и некоторые другие, чтобы сделать работу с матрицами, списками, ячейками и потоками привычной и естественной для программиста.
Наиболее быстрый способ реализации метода — вывести его путем наследования из класса-полуфабриката CmaStdMethodDef, описанного в заголовочном файле maComBase.h. Следующий код показывает реализацию метода вычисления для алгоритма наименьших квадратов.

    #include

    #include "maComClasses.h"
    #include "maComBase.h"

    // Метод вычисления в алгоритме наименьших квадратов
    class CLsmCalc : public CmaStdMethodDef {
    public:
    	CLsmCalc () {};
    	virtual ~CLsmCalc(){
    	};

    	MA_INTERFUNC GetDescription (maString* descr);
    	MA_INTERFUNC Init (ImaList*param,
                            ImaReadList*input, ImaReadList*output);
    	MA_INTERFUNC CalcDef ();
    	MA_INTERFUNC CalcCellDef (int argno,
                            maIndex index, ImaCell* cell);
    private:
    	// ячейки матриц-аргументов
    	CmaCell m_Sc_F, m_Sc_y, m_Coeff;
    };

    // Функция возвращает спецификацию метода
    HRESULT CLsmCalc::GetDescription (maString* descr) {
    	*descr = L"Calc Sc|F -> Sc|{y}";
    	return NOERROR;
    }

    // Функция инициализации метода
    HRESULT CLsmCalc::Init (ImaList*param, ImaReadList*input, ImaReadList*output) {
    	CmaList Param = param;
    	CmaReadList Input = input;
    	CmaReadList Output = output;
    	// ячейки матриц-аргументов запоминаются во время инициализации метода,
    	// что повышает эффективность доступа к матрицам во время выполнения
    	m_Sc_F = Input[L"Sc|F"];
    	m_Sc_y = Output[L"Sc|{y}"];
    	m_Coeff = Param[L"coeff"];
    	return NOERROR;
    }

    // Вычисление выходной матрицы целиком
    HRESULT CLsmCalc::CalcDef () {
    	// получение параметров и аргументов
    	CmaMatrix A = m_Sc_F;
    	CmaMatrix y = m_Sc_y;
    	CmaMatrix coeff = m_Coeff;
    	// собственно вычисление
    	int nSc = A.Size(0);  // число строк матрицы A=Sc|F
    	int nF = A.Size(1);   // число столбцов матрицы A=Sc|F
    	for (int i=0; i<nSc; i++) {
    		double sum = 0.0;
    		// вычисление линейной комбинации
    		for (int j=0; j<nF; j++)
    			sum += A[i][j] * coeff[j];
    		y[i] = sum;
    	}
    	return NOERROR;
    }

    // Вычисление одной ячейки выходной матрицы
    HRESULT CLsmCalc::CalcCellDef (int argno, maIndex index, ImaCell* cell) {
    	// получение параметров и аргументов
    	CmaMatrix A = m_Sc_F;
    	CmaMatrix y = m_Sc_y;
    	CmaMatrix coeff = m_Coeff;
    	// собственно вычисление
    	int i = index->idx[0];
    	int nF = A.Size(1);
    	double sum = 0.0;
    	for (int j=0; j<nF; j++)
    		sum += A[i][j] * coeff[j];
    	// запись результата в ячейку
    	if (cell)
    		cell->SetAsDouble (sum);
    	else
    		y[i] = sum;
    	return NOERROR;
    }