Учебники

D Программирование — Классы и Объекты

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

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

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

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

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

class Box { 
   public: 
      double length;   // Length of a box 
      double breadth;  // Breadth of a box 
      double height;   // Height of a box 
}

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

Определение объектов D

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

Box Box1;          // Declare Box1 of type Box 
Box Box2;          // Declare Box2 of type Box 

Оба объекта Box1 и Box2 имеют свои собственные копии элементов данных.

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

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

Live Demo

import std.stdio;

class Box { 
   public: 
      double length;   // Length of a box 
      double breadth;  // Breadth of a box 
      double height;   // Height of a box 
}
  
void main() { 
   Box box1 = new Box();    // Declare Box1 of type Box 
   Box box2 = new Box();    // Declare Box2 of type Box 
   double volume = 0.0;     // Store the volume of a box here  
   
   // box 1 specification 
   box1.height = 5.0; 
   box1.length = 6.0; 
   box1.breadth = 7.0; 
   
   // box 2 specification 
   box2.height = 10.0; 
   box2.length = 12.0; 
   box2.breadth = 13.0;
   
   // volume of box 1 
   volume = box1.height * box1.length * box1.breadth; 
   writeln("Volume of Box1 : ",volume);
   
   // volume of box 2 
   volume = box2.height * box2.length * box2.breadth; 
   writeln("Volume of Box2 : ", volume); 
} 

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

Volume of Box1 : 210 
Volume of Box2 : 1560 

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

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

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

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

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

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

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

Указатель на класс выполняется точно так же, как указатель на структуру. На самом деле класс — это просто структура с функциями в нем.

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