C ++: Usos para membros de dados estáticos

membros de dados estáticos têm usos umpteen em C ++, mas aqui são apenas alguns exemplos. Em primeiro lugar, você pode usar membros estáticos para manter a contagem do número de objetos que flutuam aproximadamente.

Lembre-se, no entanto, que esta contagem reflete o número de Aluna objetos (incluindo quaisquer temporários) e não necessariamente o número de alunos.

Uma utilização estreitamente relacionada para um membro estático é como um sinalizador para indicar se ocorreu uma determinada acção. Por exemplo, uma classe Rádio pode precisar para inicializar o hardware antes de enviar o primeiro afinação de comando, mas não antes de posterior tunes. Um sinalizador que indica que este é o primeiro afinação é apenas o bilhete. Isso inclui sinalização quando ocorreu um erro.

Outra utilização comum é a de proporcionar espaço para o ponteiro para o primeiro membro de uma lista - o assim chamado ponteiro de cabeçalho. Membros estáticos pode alocar bits de dados comum que todos os objetos em todas as funções de compartilhamento (uso excessivo dessa memória comum é realmente uma má ideia, pois isso faz com que erros de rastreamento difícil).

Observe como a função de membro estática número() pode acessar o membro de dados estáticos noOfStudents. Na verdade, esse é o único membro da classe que ele possa acessar - uma função de membro estático não está associado a qualquer objeto. Foram-lhe para declarar nome() para ser estático, você pode se referir a Nome do aluno(), que imediatamente levantam a questão, # Nome 147 Que # 148?;

O seguinte trecho é apenas um caso em que um método estático pode referir-se directamente a um membro não-estático:

classe Student {public: static int elementsInName () {int sizeOfArray = sizeof (name) -Retornar sizeOfArray / sizeof (char) -} protegida: char nome [MAX_NAME_SIZE] -} -

Aqui o método estático elementsInName () refere-se a nome sem fazer referência a qualquer objeto. Isso não era legal antes de o padrão de 2011. É permitido agora porque o tamanho de nome é o mesmo para todos os objectos. Assim, não importa qual objeto que você se refere.

Você pode se perguntar por sizeof (name) foi dividido pela sizeof (char). o sizeof (name) retorna o número de bytes no nome da matriz. Mas o que você quer é o número de elementos em nome, então você tem que dividir pelo tamanho de cada elemento de nome.

Mas não é sizeof (char) igual a 1? Bem, talvez, mas talvez não. dividindo o tamanho de a matriz pela tamanho de um único elemento sempre funciona para todos os tipos de matriz.

menu