Разделите встроенные числовые типы на подклассы, чтобы создать настроенные типы данных, которые наследовали функциональность встроенного типа. Добавьте функциональность в обеспеченный суперклассом методами класса с реализацией. Подклассы без свойств хранят числовые данные как тип суперкласса. Если ваш проект подкласса не требует свойств хранить другие данные, реализация более проста, потому что вы не должны задавать методы индексации и конкатенации.
Для получения дополнительной информации смотрите Подклассы Встроенных типов MATLAB.
Этот пример показывает класс, выведенный из встроенного uint8 класс. Этот класс упрощает процесс поддержания набора данных изображения интенсивности, заданных uint8 значения. Основные операции класса включают:
Возможность преобразовать различные классы данных изображения к uint8 уменьшать устройство хранения данных данных объектов.
Метод, чтобы отобразить изображения интенсивности, содержавшиеся в объектах подкласса.
Способность использовать все методы, поддержанные uint8 данные (например, size, индексация, reshapeсдвиг разряда\catfft, арифметические операторы, и так далее).
Данные о классе являются матрицами данных изображения интенсивности, сохраненных в части суперкласса объекта подкласса. Этот подход не требует никаких свойств.
DocUint8 класс хранит данные изображения, которые преобразуют данные при необходимости:
classdef DocUint8 < uint8 methods function obj = DocUint8(data) if nargin == 0 data = uint8(0); end obj = obj@uint8(data); % Store data on superclass end function h = showImage(obj) data = uint8(obj); figure; colormap(gray(256)) h = imagesc(data,[0 255]); axis image brighten(.2) end end end
DocUint8 класс предоставляет метод, чтобы отобразить все изображения, сохраненные как DocUint8 объекты сопоставимым способом. Например:
cir = imread('circuit.tif');
img1 = DocUint8(cir);
img1.showImage;
Поскольку DocUint8 подклассы uint8, можно использовать любой uint8 методы. Например,
size(img1)
ans = 280 272
возвращает размер данных изображения.
Унаследованные методы выполняют операции индексации, но возвращают объекты того же класса как подкласс.
Поэтому можно индексировать в данные изображения и вызвать метод подклассов:
showImage(img1(100:200,1:160));
Преобразованные в нижний индекс ссылочные операции (управляемый наследованным subsref метод), возвращают DocUint8 объект.

Можно присвоить значения индексируемым элементам:
img1(100:120,140:160) = 255; img1.showImage;
Преобразованные в нижний индекс операции присвоения (управляемый наследованным subsasgn метод), возвращают DocUint8 объект.

Операции конкатенации работают над DocUint8 объекты, потому что этот класс наследовал uint8
horzcat и vertcat методы, которые возвращают DocUint8 объект:
showImage([img1 img1]);

Методы, которые работают со значениями данных, такими как арифметические операторы, всегда возвращают объект встроенного типа (не типа подкласса). Например, умножение DocUint8 объекты возвращают uint8 объект, таким образом вызывая showImage броски ошибка:
a = img1.*1.8; showImage(a);
Check for missing argument or incorrect argument data type in call to function 'showImage'.
Чтобы выполнить операции этого типа, реализуйте метод подклассов заменить унаследованный метод. times метод реализует массив (поэлементно) умножение.
Добавьте этот метод в DocUint8 класс:
function o = times(obj,val) u8 = uint8(obj).*val; o = DocUint8(u8); end
Когда вы заменяете uint8 метод, MATLAB® вызывает метод подклассов, не метод базового класса. Метод подклассов должен:
Вызовите uint8
times метод на DocUint8 данные объектов.
Создайте новый DocUint8 объект с помощью uint8 данные.
После добавления times метод к DocUint8 класс, выход выражений умножения является объектом DocUint8 класс:
showImage(img1.*1.8);
