MATLAB: функции вызова ООП из другого класса

Моя цель — спроектировать многоразовый движок, запрограммированный в MATLAB, используя MATLAB OOP. Это моя первая попытка сделать это. Моя проблема, которую я хотел бы решить, заключается в следующем: у меня есть абстрактный класс cPayoffBase это определяет интерфейс для выплаты неизвестного типа. Наследование cPayoffBaseУ меня есть конкретный класс cPayoffCall который реализует опцию вызова. Теперь я определил другой класс cVanillaDerivs это берет определенный пользователем объект выплаты и цену исполнения. Когда я передаю пользовательский объект в cVanillaDerivs рассчитать некоторое количество исключение Index exceeds matrix dimensions. поверхностей. Я предоставлю коды в деталях.

cPayoffBase.m

classdef (Abstract) cPayoffBase < handle

methods (Abstract)
mfGetPayoff(argSpotPrc)
end

end

cPayoffCall.m

classdef cPayoffCall < cPayoffBase

properties (GetAccess = private, SetAccess = private)

dmStrikePrc

end

methods

function obj = cPayoffCall(argStrikePrc)

obj.dmStrikePrc = argStrikePrc;

end

function rslt = mfGetPayoff(obj, argSpotPrc)

rslt = max(argSpotPrc - obj.dmStrikePrc, 0.0);

end

end

cVanillaDerivs.m

classdef cVanillaDerivs

%% Data Members
properties (GetAccess = private, SetAccess = private)
dmPayoffObj
dmExpiryDt
end

%% Implementation
methods

% Constructor
function obj = cVanillaDerivs(argPayoffObj, argExpiryDt)

obj.dmPayoffObj = argPayoffObj;
obj.dmExpiryDt  = argExpiryDt;

end

% Member Functions
function rslt = mfGetExpriyDt(obj)

rslt = obj.dmExpiryDt;

end

function rslt = mfGetDerivPayoff(argSpotPrc)

rslt = obj.dmPayoffObj(argSpotPrc);

end
end
end

командное окно

>> clear classes
>> spot = 100; strike = 50; T = 1;
>> payoffObj = cPayoffCall(strike);
>> typeVanilla = cVanillaDerivs(payoffObj, T);
>> mfGetDerivPayoff(typeVanilla, spot)
Index exceeds matrix dimensions.

Error in cVanillaDerivs/mfGetDerivPayoff (line 37)
rslt = obj.dmPayoffObj(argSpotPrc);

В C ++, учитывая, что у меня есть класс-обертка и обернуть объект класса cPayoffBase Я могу сделать что-то вроде return (*dmPayoff)(dmSpotPrc) для двойной функции возврата mfGetDerivPayoff(double dmSpotPrc) const в классе cVanillaDerivs, Пожалуйста, дайте мне знать мои ошибки и, если возможно, как я могу добиться того же процесса в MATLAB OOP, как C ++.

0

Решение

Вы пытаетесь получить доступ к элементу 100 объекта dmPayoffObj, Однако это свойство установлено в payOffObj, который не является массивом. Таким образом, ошибка.

Я думаю, что вы хотели вернуть выплату dmPayoffObj, Вы должны изменить метод mfGetDerivPayoff класса cVanillaDerivs следующее:

function rslt = mfGetDerivPayoff(argSpotPrc)
rslt = obj.dmPayoffObj.mfGetPayoff(argSpotPrc);
end
1

Другие решения

Ты имел ввиду rslt = obj.dmPayoffObj.mfGetPayoff(argSpotPrc); вместо rslt = obj.dmPayoffObj(argSpotPrc);?

1

По вопросам рекламы [email protected]