Классы и объекты


Предыдущая страница
Следующая страница  

Классы являются центральной возможностью в языке D, поддерживающей объектно-ориентированное программирование, и они часто называются пользовательскими типами.

Класс используется для указания формы объекта и сочетает в себе представление данных и методы для управления этими данными в один аккуратный пакет. Данные и функции внутри класса называются членами класса.

Определения класса в D

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

Определение класса начинается с ключевого слова class, за которым следует имя класса; затем идёт тело класса, заключённое в пару фигурных скобок. Определение класса не должно завершаться ни точкой с запятой, ни списком объявлений. Например, мы определили тип данных Box (коробка) с использованием ключевого слова class следующим образом:

class Box { 
   public: 
      double length;   // Длина коробки 
      double breadth;  // Ширина коробки 
      double height;   // Высота коробки 
}

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

Объявление объектов в D

Класс предоставляет собой прототип для объектов, поэтому по-существу объект создается из класса. Вы объявляете объекты класса точно таким же образом, как вы объявляете переменные базовых типов. Следующие утверждения объявляют два объекта класса Box:

Box box1;          // Объявить box1 типа Box
Box box2;          // Объявить box2 типа Box 

Оба объекта box1 и box2 имеют собственные копии данных-членов.

К сожалению, здесь авторы учебника не совсем правы. Такое объявление подходит для объектов структур, а для объектов классов память не будет распределена, и будет вызвана ошибка времени выполнения при попытке доступа к членам класса. Объекты классов надо создавать из кучи с помощью оператора new:

Box box1 = new Box();          // Объявить и создать box1 типа Box
Box box2 = new Box();          // Объявить и создать box2 типа Box 
– прим. пер.

Доступ к членам данных

Доступ к публичным членам данных объекта класса осуществляется с помощью оператора прямого доступа (.). Давайте попробуем следующий пример, чтобы всё было ясно:

import std.stdio;

class Box { 
   public: 
      double length;   // Длина коробки 
      double breadth;  // Ширина коробки 
      double height;   // Высота коробки 
}
  
void main() { 
   Box box1 = new Box();    // Объявить и создать box1 типа Box 
   Box box2 = new Box();    // Объявить и создать box2 типа Box 
   double volume = 0.0;     // Здесь сохраняем объём коробки.
   
   // спецификация коробки 1 
   box1.height = 5.0; 
   box1.length = 6.0; 
   box1.breadth = 7.0; 
   
   // спецификация коробки 1 
   box2.height = 10.0; 
   box2.length = 12.0; 
   box2.breadth = 13.0;
   
   // объём коробки 1 
   volume = box1.height * box1.length * box1.breadth; 
   writeln("Объём коробки 1 : ",volume);
   
   // объём коробки 2 
   volume = box2.height * box2.length * box2.breadth; 
   writeln("Объём коробки 2 : ", volume); 
} 

Когда вы скомпилируете и выполните эту программу, она возвратит следующий результат:

Объём коробки 1 : 210
Объём коробки 2 : 1560

Важно отметить, что доступ к закрытым и защищённым членам невозможен напрямую, с использованием оператора прямого доступа к члену (.). Вскоре вы узнаете, как можно получить доступ к закрытым и защищённым членам.

Классы и объекты в D

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

№ п/п Понятие и описание
1 Функции-члены класса

Функция-член класса – это функция, у которой определение её или её прототипа находится в определении класса, как и для любой другой переменной.

2 Модификаторы доступа класса

Член класса может быть определён как public (открытый), private (закрытый) или protected (защищенный). По умолчанию члены будут считаться закрытыми.

3 Конструкторы и деструкторы

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

4 Указатель this в D

Каждый объект имеет специальный указатель с именем this, который указывает на сам этот объект.

5 Указатели на классы в D

Указатель на класс делается точно так же, как указатель на структуру.

6 Статические члены класса

Как данные-члены, так и функции-члены класса могут быть объявлены как статические.


Предыдущая страница
Следующая страница