Этот пример реализует класс, чтобы представлять оптическую мультиплексную карту. Эти карты обычно имеют несколько входных портов и выходной порт. Класс MuxCard
представляет порты именами порта и уровнями данных порта. Норма выработки мультиплексной карты является суммой скоростей передачи данных входного порта.
Класс MuxCard
выводит от класса int32
, потому что 32-битные целые числа представляют скорости передачи данных входного порта. Класс MuxCard
наследовал методы класса int32
, который упрощает реализацию этого подкласса. Например, индексация числового массива и арифметические операции работают над объектами MuxCard
, потому что класс наследовал эти операции от класса int32
.
Вот определение класса MuxCard
. Заметьте, что уровни входного порта инициализируют фрагмент int32
класса.
classdef MuxCard < int32 properties InPutNames OutPutName end properties (Dependent = true) OutPutRate end methods function obj = MuxCard(inptnames, inptrates, outpname) obj = obj@int32(inptrates); obj.InPutNames = inptnames; obj.OutPutName = outpname; end function x = get.OutPutRate(obj) x = sum(obj); end function x = subsref(card, s) if strcmp(s(1).type,'.') base = subsref@int32(card, s(1)); if isscalar(s) x = base; else x = subsref(base, s(2:end)); end else x = subsref(int32(card), s); end end end end
Конструктор берет три аргумента:
inptnames
— Массив ячеек имен входного порта
inptrates
— Вектор уровней входного порта
outpname
— Назовите для выходного порта
omx = MuxCard({'inp1','inp2','inp3','inp4'},[3 12 12 48],'outp')
omx = 1x4 MuxCard array with properties: InPutNames: {'inp1' 'inp2' 'inp3' 'inp4'} OutPutName: 'outp' OutPutRate: 75 int32 data: 3 12 12 48
Используйте объект MuxCard
как массив значений int32
. Например, этот оператор индексации получает доступ к данным в объекте определить имена входных портов, которые имеют уровень 12
:
omx.InPutNames(omx==12)
ans = 'inp2' 'inp3'
Оператор индексации генерирует индекс логического массива:
omx == 12
ans = 0 1 1 0
Индексация доступов к объекту MuxCard
вектор int32
уровней входного порта:
omx(1:2)
ans = 3 12
Свойство OutPutRate
заставляет использование метода доступа sum
суммировать уровни выходного порта:
omx.OutPutRate
ans = 75