Spec-Zone.ru › Octave 9

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–2026 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/v9.4.0/Methods.html

Spec-Zone.ru

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