D Programação - membros estáticos de uma classe
Podemos definir os membros da classe staticusando palavras-chave estáticas. Quando declaramos um membro de uma classe como estático, isso significa que não importa quantos objetos da classe são criados, há apenas uma cópia do membro estático.
Um membro estático é compartilhado por todos os objetos da classe. Todos os dados estáticos são inicializados em zero quando o primeiro objeto é criado, se nenhuma outra inicialização estiver presente. Você não pode colocá-lo na definição de classe, mas pode ser inicializado fora da classe como feito no exemplo a seguir, redeclarando a variável estática, usando o operador de resolução de escopo :: para identificar a qual classe ela pertence.
Vamos tentar o exemplo a seguir para entender o conceito de membros de dados estáticos -
import std.stdio;
class Box {
public:
static int objectCount = 0;
// Constructor definition
this(double l = 2.0, double b = 2.0, double h = 2.0) {
writeln("Constructor called.");
length = l;
breadth = b;
height = h;
// Increase every time object is created
objectCount++;
}
double Volume() {
return length * breadth * height;
}
private:
double length; // Length of a box
double breadth; // Breadth of a box
double height; // Height of a box
};
void main() {
Box Box1 = new Box(3.3, 1.2, 1.5); // Declare box1
Box Box2 = new Box(8.5, 6.0, 2.0); // Declare box2
// Print total number of objects.
writeln("Total objects: ",Box.objectCount);
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Constructor called.
Constructor called.
Total objects: 2
Membros de função estática
Ao declarar um membro de função como estático, você o torna independente de qualquer objeto específico da classe. Uma função de membro estático pode ser chamada mesmo se nenhum objeto da classe existir e ostatic as funções são acessadas usando apenas o nome da classe e o operador de resolução de escopo ::.
Uma função de membro estático só pode acessar o membro de dados estáticos, outras funções de membro estático e quaisquer outras funções de fora da classe.
As funções de membro estáticas têm um escopo de classe e não têm acesso ao thisponteiro da classe. Você pode usar uma função de membro estático para determinar se alguns objetos da classe foram criados ou não.
Vamos tentar o exemplo a seguir para entender o conceito de membros de função estática -
import std.stdio;
class Box {
public:
static int objectCount = 0;
// Constructor definition
this(double l = 2.0, double b = 2.0, double h = 2.0) {
writeln("Constructor called.");
length = l;
breadth = b;
height = h;
// Increase every time object is created
objectCount++;
}
double Volume() {
return length * breadth * height;
}
static int getCount() {
return objectCount;
}
private:
double length; // Length of a box
double breadth; // Breadth of a box
double height; // Height of a box
};
void main() {
// Print total number of objects before creating object.
writeln("Inital Stage Count: ",Box.getCount());
Box Box1 = new Box(3.3, 1.2, 1.5); // Declare box1
Box Box2 = new Box(8.5, 6.0, 2.0); // Declare box2
// Print total number of objects after creating object.
writeln("Final Stage Count: ",Box.getCount());
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
Inital Stage Count: 0
Constructor called.
Constructor called
Final Stage Count: 2