exponenta event banner

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

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

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

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 методы поддержки конкатенации любым способом имеют смысл для вашего подкласса.

Связанные темы