Поведение наследованных встроенных методов

Подкласс двойной

Большинство встроенных функций, используемых со встроенными классами, на самом деле являются методами встроенного класса. Для примера, 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 методы для поддержки конкатенации любым способом имеют смысл для вашего подкласса.

Похожие темы