O D oferece suporte a classes e interfaces como em Java ou C++.
Qualquer tipo de class
herda implicitamente do Object
(objeto).
class Foo { } // herda de Object
class Bar : Foo { } // Bar é imcorporado ao Foo
As classes em D geralmente são instanciadas no heap usando new
:
auto bar = new Bar;
Os objetos de classe são sempre tipos de referência e, ao contrário do struct
, não são
copiados por valor.
Bar bar = foo; // bar aponta para foo
O coletor de lixo garantirá que a memória seja liberada quando não houver mais referências a um objeto.
Se uma função de membro de uma classe base for substituída, a palavra-chave
override
deve ser usada para indicar isso. Isso evita a substituição não intencional
sobreposição não intencional de funções.
class Bar : Foo {
override functionFromFoo() {}
}
Em D, as classes só podem herdar de uma classe.
final
em uma classe base para não permitir
a sobreposição dela
abstract
para forçar as classes derivadas
a sobrepor ela
abstract
para garantir que
que ela não seja instanciada
super(...)
pode ser usado para chamar explicitamente o construtor da base
Para objetos de classe, os operadores ==
e !=
comparam o conteúdo dos objetos.
Portanto, a comparação com null
é inválida, pois null
não tem conteúdo.
O is
compara a equivalência. Para comparar a não-equivalência, use e1 !is e2
.
MyClass c;
if (c == null) // erro
...
if (c is null) // ok
...
Para objetos struct
, todos os bits são comparados,
para outros tipos de operandos, equivalência é o mesmo que igualdade.