Оглавление

Скриптовый класс

Синтаксис классов похож на С++, за исключением того, что public, protected, и private не доступны. Все методы класса должны быть объявлены с их реализацией, как в Java.

Конструктор и деструктор по умолчанию не нужны, если не требуется чтото особое. AngelScript позаботиться о надлежащей инициализации и освобождении членов по их создании\уничтожению, даже если оно не осуществляется вручную.

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

// Описание класса
class MyClass
{
    // Конструктор
    MyClass()
    {
      a = 0;
    }
    // Деструктор
    ~MyClass()
    {
    }
    // Второй конструктор
    MyClass(int a)
    {
      this.a = a;
    }
    // Метод
    void DoSomething()
    {
      a *= 2;
    }
    // Свойство
    int a;
}

AngelScript поддерживает одиночное наследование, когда производный класс наследует свойства и методы своего базового класса. Множественное наследование не поддерживается, но полиморфизм возможен путем реализации интерфейса.

Все методы класса являются виртуальными, так что нет необходимости указывать это вручную. При реализации конструктора для производного класса конструктор базового класса вызывается с использованием ключевого слова super. Если конструктор базового класса вручную не вызывается, компилятор автоматически вставить вызов конструктора по умолчанию в начале. Деструктор базового класса всегда будет вызываться после деструктора производного класса, поэтому нет необходимости делать это вручную.

// Наследуемый класс
class MyDerived : MyClass
{
    // Конструктор
    MyDerived()
    {
      // Вызов конструктора базового класса
      super(10);
      b = 0;
    }
    // Overloading a virtual method
    void DoSomething()
    {
      // Вызов метода базового класса
      MyClass::DoSomething();
      // ...
      b = a;
    }
    int b;
}

С тех пор как AngelScript использует автоматическое управление памятью, трудно точно узнать, когда вызывается деструктор, поэтому не стоит полагаться на то, что деструктор вызывается в конкретный момент времени. AngelScript также вызовет деструктор только один раз, даже если объект будет воскрешен добавлением ссылки на него во время выполнения деструктора.


Перевод - arroy.one@gmail.com. При копировании материалов указывайте ссылку на источник.