Большинство встроенных функций, используемых со встроенными классами, фактически являются методами встроенного класса. Например, double и single классы определяют несколько методов для выполнения арифметических операций, индексирования, матричной операции и т.д. Все эти встроенные методы класса работают с подклассами встроенного класса.
Подклассификация double позволяет классу использовать функции без реализации методов, определенных встроенным классом MATLAB ®.
DocSimpleDouble класс подкласс встроенного double класс.
classdef DocSimpleDouble < double methods function obj = DocSimpleDouble(data) if nargin == 0 data = 0; end obj = obj@double(data); end end end
Создание экземпляра класса DocSimpleDouble.
sc = DocSimpleDouble(1:10)
sc =
1x10 DocSimpleDouble:
double data:
1 2 3 4 5 6 7 8 9 10Вызов метода, унаследованного от класса double который работает с данными, такими как sum. sum возвращает double и, следовательно, использует display метод класса double:
sum(sc)
ans =
55Индекс sc как массив двойников. Возвращаемое значение является классом подкласса:
a = sc(2:4)
a =
1x3 DocSimpleDouble:
double data:
2 3 4
Индексированное назначение работает так же, как и встроенный класс. Возвращаемое значение является классом подкласса:
sc(1:5) = 5:-1:1
sc =
1x10 DocSimpleDouble:
double data:
5 4 3 2 1 6 7 8 9 10
Вызов метода, который изменяет порядок элементов данных, работает с данными, но возвращает объект подкласса:
sc = DocSimpleDouble(1:10); sc(1:5) = 5:-1:1; a = sort(sc)
a =
1x10 DocSimpleDouble:
double data:
1 2 3 4 5 6 7 8 9 10
При вызове встроенного метода значений данных для объекта подкласса MATLAB использует часть суперкласса объекта подкласса в качестве входных данных для метода. Возвращаемое значение совпадает с классом встроенного класса. Например:
sc = DocSimpleDouble(1:10); a = sin(sc); class(a)
ans = double
Эта группа встроенных методов переупорядочивает или изменяет форму массива входных аргументов. Эти методы работают с частью суперкласса объекта подкласса, но возвращают объект того же типа, что и подкласс.
sc = DocSimpleDouble(randi(9,1,10))
sc = DocSimpleDouble(randi(9,1,10))
sc =
1x10 DocSimpleDouble:
double data:
6 1 8 9 7 7 7 4 6 2b = sort(sc)
b =
1x10 DocSimpleDouble:
double data:
1 2 4 6 6 7 7 7 8 9Методы в этой группе включают в себя:
Встроенные классы используют специально реализованные версии subsref, subsasgn, и subsindex методы реализации индексирования. При индексации объекта подкласса используются только встроенные данные (а не свойства, определенные подклассом).
Например, элемент индексации 2 в DocSimpleDouble объект подкласса возвращает второй элемент в векторе:
sc = DocSimpleDouble(1:10); a = sc(2)
a =
DocSimpleDouble
double data:
2
Значение, возвращенное операцией индексирования, является объектом подкласса. Индексированные ссылки нельзя создавать, если подкласс определяет свойства, если подкласс не переопределяет значения по умолчанию subsref способ.
Назначение нового значения второму элементу в DocSimpleDouble объект работает только с данными суперкласса:
sc(2) = 12
sc =
1x10 DocSimpleDouble:
double data:
1 12 3 4 5 6 7 8 9 10
subsref способ также реализует точечную нотацию для методов.
Встроенные классы используют функции horzcat, vertcat, и cat для реализации конкатенации. При использовании этих функций с объектами подкласса одного типа MATLAB объединяет данные суперкласса для формирования нового объекта. Например, можно объединить объекты DocSimpleDouble класс:
sc1 = DocSimpleDouble(1:10); sc2 = DocSimpleDouble(11:20); [sc1,sc2]
ans =
1x20 DocSimpleDouble:
double data:
Columns 1 through 13
1 2 3 4 5 6 7 8 9 10 11 12 13
Columns 14 through 20
14 15 16 17 18 19 20
[sc1;sc2]
ans =
2x10 DocSimpleDouble:
double data:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
Соедините два объекта вдоль третьего размера:
c = cat(3,sc1,sc2)
c =
1x10x2 DocSimpleDouble:
double data:
(:,:,1) =
1 2 3 4 5 6 7 8 9 10
(:,:,2) =
11 12 13 14 15 16 17 18 19 20Если подкласс встроенного класса определяет свойства, невозможно объединить объекты подкласса. Невозможно определить способ комбинирования свойств различных объектов. Однако подкласс может определять пользовательские horzcat и vertcat методы поддержки конкатенации любым способом имеют смысл для вашего подкласса.