Встроенные числовые типы подкласса для создания настраиваемых типов данных, наследующих функциональность встроенного типа. Добавьте функциональные возможности к функциям, предоставляемым суперклассом, реализуя методы классов. Подклассы без свойств хранят числовые данные как тип суперкласса. Если конструкция подкласса не требует свойств для хранения других данных, реализация проще, поскольку нет необходимости определять методы индексирования и конкатенации.
Дополнительные сведения см. в разделе Подклассы встроенных типов MATLAB.
В этом примере показан класс, производный от встроенного uint8 класс. Этот класс упрощает процесс поддержания коллекции данных изображения интенсивности, определенных uint8 значения. Основные операции класса включают в себя:
Возможность преобразования различных классов данных изображения в uint8 уменьшение объема хранения объектных данных.
Метод отображения изображений интенсивности, содержащихся в объектах подкласса.
Возможность использования всех методов, поддерживаемых uint8 данные (например, size, индексация, reshape, bitshift, cat, fft, арифметические операторы и так далее).
Данные класса представляют собой матрицы данных изображения интенсивности, хранящиеся в суперклассной части объекта подкласса. Этот подход не требует свойств.
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);
