Spec-Zone.ru › Octave 6

34.6.3 Методы

Все методы класса должны быть определены внутри блоков methods. Исключение из этого правила описано в конце этого подраздела. Эти methods блоки могут иметь дополнительные атрибуты, указывающие права доступа или является ли метод статическим, то есть методом, который можно вызывать без создания объекта этого класса.

classdef some_class
  methods
    function obj = some_class ()
      disp ("New instance created.");
    endfunction

    function disp (obj)
      disp ("Here is some_class.");
    endfunction
  endmethods

  methods (Access = mode)
    function r = func (obj, r)
      r = 2 * r;
    endfunction
  endmethods

  methods (Static = true)
    function c = circumference (radius)
      c = 2 * pi () .* radius;
    endfunction
  endmethods
endclassdef

Конструктор класса объявляется в блоке methods и должен иметь то же имя, что и класс, и ровно один выходной аргумент, который является объектом этого класса.

Также возможно перегрузка встроенных или унаследованных методов, например, функция disp в примере выше, чтобы указать Octave, как должны отображаться объекты some_class (см. Методы классов).

В общем случае, первый аргумент в определении метода всегда является объектом, из которого он вызывается. Методы класса можно вызывать, передавая объект в качестве первого аргумента этому методу или вызывая объект, за которым следует точка ("."), и имя метода с последующими аргументами:

>> obj = some_class ();
New instance created.
>> disp (obj);   # both are
>> obj.disp ();  # equal

В some_class, метод func определяется внутри блока methods, устанавливая атрибут Access в mode, который является одним из:

public

К методам можно получить доступ из любого места.

private

К методам можно получить доступ только из других методов класса. Подклассы этого класса не могут получить к ним доступ.

protected

К методам можно получить доступ только из других методов класса и из подклассов этого класса.

По умолчанию доступ для методов является public.

Наконец, метод circumference определен в статическом блоке methods и может быть использован без создания объекта some_class. Это полезно для методов, которые не зависят от свойств класса. Имя класса и имя статического метода, разделенные точкой ("."), вызывают этот статический метод. В отличие от нестатических методов, объект не передается в качестве первого аргумента, даже если вызов осуществляется с помощью объекта some_class.

>> some_class.circumference (3)
⇒ ans =  18.850
>> obj = some_class ();
New instance created.
>> obj.circumference (3)
⇒ ans =  18.850

Кроме того, методы класса могут быть определены как функции в папке с тем же именем, что и класс, с префиксом символом ‘@’ (см. Создание класса). Основной classdef файл также должен храниться в этой папке класса.

© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v6.4.0/Methods.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API