Programação D - Classes e objetos

As classes são o recurso central da programação em D que oferece suporte à programação orientada a objetos e costumam ser chamadas de tipos definidos pelo usuário.

Uma classe é usada para especificar a forma de um objeto e combina representação de dados e métodos para manipular esses dados em um pacote organizado. Os dados e funções dentro de uma classe são chamados de membros da classe.

Definições de classe D

Ao definir uma classe, você define um blueprint para um tipo de dados. Na verdade, isso não define nenhum dado, mas define o que significa o nome da classe, ou seja, em que consistirá um objeto da classe e quais operações podem ser executadas nesse objeto.

Uma definição de classe começa com a palavra-chave classseguido pelo nome da classe; e o corpo da classe, delimitado por um par de chaves. Uma definição de classe deve ser seguida por um ponto e vírgula ou uma lista de declarações. Por exemplo, definimos o tipo de dados Box usando a palavra-chaveclass como segue -

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

A palavra-chave publicdetermina os atributos de acesso dos membros da classe que o seguem. Um membro público pode ser acessado de fora da classe em qualquer lugar dentro do escopo do objeto de classe. Você também pode especificar os membros de uma classe comoprivate ou protected que discutiremos em uma subseção.

Definindo Objetos D

Uma classe fornece os blueprints para objetos, portanto, basicamente, um objeto é criado a partir de uma classe. Você declara objetos de uma classe exatamente com o mesmo tipo de declaração que declara variáveis ​​de tipos básicos. As seguintes declarações declaram dois objetos da classe Box -

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

Ambos os objetos Box1 e Box2 têm sua própria cópia de membros de dados.

Acessando os Membros de Dados

Os membros de dados públicos de objetos de uma classe podem ser acessados ​​usando o operador de acesso direto ao membro (.). Vamos tentar o seguinte exemplo para deixar as coisas claras -

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); 
}

Quando o código acima é compilado e executado, ele produz o seguinte resultado -

Volume of Box1 : 210 
Volume of Box2 : 1560

É importante observar que membros privados e protegidos não podem ser acessados ​​diretamente usando o operador de acesso direto ao membro (.). Em breve, você aprenderá como membros privados e protegidos podem ser acessados.

Classes e objetos em D

Até agora, você teve uma ideia muito básica sobre classes e objetos D. Existem outros conceitos interessantes relacionados a classes e objetos D que discutiremos em várias subseções listadas abaixo -

Sr. Não. Conceito e descrição
1 Funções de membro de classe

Uma função de membro de uma classe é uma função que tem sua definição ou seu protótipo dentro da definição de classe como qualquer outra variável.

2 Modificadores de acesso de classe

Um membro da classe pode ser definido como público, privado ou protegido. Por padrão, os membros seriam considerados privados.

3 Construtor e destruidor

Um construtor de classe é uma função especial em uma classe que é chamada quando um novo objeto da classe é criado. Um destruidor também é uma função especial que é chamada quando o objeto criado é excluído.

4 O ponteiro this em D

Cada objeto tem um ponteiro especial this que aponta para o próprio objeto.

5 Ponteiro para classes D

Um ponteiro para uma classe é feito exatamente da mesma maneira que um ponteiro para uma estrutura. Na verdade, uma classe é apenas uma estrutura com funções.

6 Membros estáticos de uma classe

Os membros de dados e membros de função de uma classe podem ser declarados como estáticos.