Класи

D забезпечує підтримку класів та інтерфейсів, як Java чи C++.

Будь який class неявно успадковується від Object.

class Foo { } // успадковується від Object
class Bar: Foo { } // Bar є також Foo

Класи у D, як правило, створюються у купі, за допомогою виразу new:

auto bar = new Bar;

Об'єкти класу завжди є посиланням, і на відміну від struct, не копіюються за значенням.

Bar bar = foo; // bar посилається на foo

Збирач сміття звiльняє пам'ять об'єкту лише тодi, коли впевниться, що ніякіх посилань на об'єкт більше не існує.

Успадкування

Щоб вказати на те, що функція базового класу була перевизначеною, потрібно використати ключове слово override. Це дозволяє нам запобігти ненавмисному перевизначенню функцій.

class Bar: Foo {
    override functionFromFoo() {}
}

У D класи можуть успадковуватись тільки від одного класу.

Фiнальнi та абстрактнi функції

  • Щоб заборони перевизначення, функція може мати позначення final у базовому класі
  • Функцію можна оголосити, як abstract, щоб змусити перевизначити її
  • Цілий клас може бути оголошений, як abstract, щоб переконатися у тому, що жодного екземпляру класу не буде створено
  • Щоб отримати доступ до базового класу, потрібно використовувати спеціальне ключове слово super

Додатково

rdmd playground.d