Большинство встроенных функций, используемых со встроенными классами, на самом деле являются методами встроенного класса. Для примера, double
и single
классы задают несколько методов для выполнения арифметических операций, индексации, матричной операции и так далее. Все эти встроенные методы класса работают с подклассами встроенного класса.
Функции подклассирования double
позволяет вашему классу использовать функции без реализации методов, которые MATLAB® определяет встроенный класс.
The 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
как массив типа double. Возвращенное значение является классом подкласса:
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 2
b = 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
The 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
методы для поддержки конкатенации любым способом имеют смысл для вашего подкласса.