Diferença entre classe e estrutura

Antes de entendermos a diferença entre Classe e Estrutura, devemos conhecer alguns conceitos básicos associados a eles. Sem uma compreensão de conceitos, é difícil compreender as diferenças entre os dois.

O que é classe e objeto:

Esses são os dois conceitos importantes relacionados à Programação Orientada a Objetos e formam a base para enquadrar as funções e os dados que passam para outras funções. Para uma melhor compreensão, podemos correlacioná-lo a um exemplo da vida real. Uma classe pode ser considerada como uma loja e um objeto pode ser qualquer uma das lojas individuais e específicas, como mercearia, papelaria, frutas etc. Todos os objetos compartilham as propriedades comuns da classe principal - a loja - e, por sua vez, os objetos podem ter suas próprias propriedades exclusivas, como design específico, iluminação etc. Por meio dos objetos, podemos realmente usar a classe; eles formam as instâncias de uma classe.

Sintaxe de uma classe

Classe Store

coisas públicas de string;

design de cordas públicas;

Sintaxe de um objeto

Mercearia da loja = nova loja ();

Artigos de papelaria da loja = nova loja ();

O que é um Struct?

Um Struct inclui apenas os dados e, portanto, é útil para enquadrar os requisitos de dados individuais por meio dos objetos Struct. Ao contrário de uma classe, falta funções. Aqui está sua sintaxe:

struct grocery_entrance

char nome_da_ entrada [50];

int entrance_size;

mercearia_entrada;

Todas as lojas podem usar a entrada do Struct com nomes e tamanhos individuais.

O que é herança?

É semelhante à maneira como um filho herda as posses de seu pai e, por sua vez, também pode adicionar outras posses. A classe pode ser uma classe base ou uma classe derivada, na qual a primeira pode ser tomada como base para formar a segunda. A classe derivada adiciona poucas outras propriedades para si, além do que obtém da classe base. Quando consideramos o exemplo acima, a mercearia ainda pode ser derivada de uma mercearia específica, como a mercearia XYZ.

Agora que estamos familiarizados com os conceitos básicos, podemos entrar na diferença real entre Class e Struct.

Como eles diferem?

  • Reutilização: Como as Classes formam a estrutura básica, elas podem ser reutilizadas; As estruturas, no entanto, são elementos individuais com propriedades específicas, portanto não podem ser reutilizadas. Por exemplo, a classe Mercearia pode ser usada para qualquer tipo de mercearia, mas o Struct grocery_entrance é específico apenas para isso e não faz sentido reutilizá-lo em outras classes..
  • Visibilidade: Todas as funções em uma classe estão disponíveis publicamente para seus objetos. Por exemplo, temos uma função denominada 'coisas' na classe 'loja'. A função 'coisas' é visível para todos os seus objetos, como 'mercearia', 'papelaria', etc. Essa visibilidade não é possível com o Structs, pois os dados do struct são restritos a si mesmos e não são visíveis a outros Structs. Para esclarecer, podemos dizer que os dados de 'grocery_entrance' não são publicamente visíveis para todas as outras lojas.
  • Passe por referência e passe por valor: Passar por referência está enviando apenas o local da memória e não os dados reais para as funções. Isso significa que sempre que o valor muda, a alteração é refletida nas funções correspondentes. A passagem por valor, por sua vez, está apenas enviando o valor para a função. Nesse caso, uma alteração no valor após o envio não será refletida na função. Classe usa passagem por referência e Struct usa valor de passagem.
  • Herança: As classes podem ser herdadas ainda mais para formar subclasses, mas o Structs não pode utilizar a herança. Por exemplo, a Class Store atribui suas funções à subclasse 'mercearia'. Mas a estrutura 'grocery_entrance' não pode herdar nenhuma função. Podemos dizer que não há conceito como subestrutura aqui.
  • Visibilidade padrão: Todos os membros de uma classe são mantidos como entidades privadas por padrão, enquanto os membros de uma estrutura são mantidos como entidades públicas por padrão.
  • O tamanho de uma classe e estrutura vazias: A classe usa um tamanho de 1 Byte, mesmo quando está vazio, enquanto o Struct nunca usa memória quando está vazio. Isso significa que podemos dizer que o tamanho de uma estrutura vazia é igual a 0 bytes.
  • Coleta de lixo: A coleta de lixo é possível com as Classes, pois elas usam passagem por referência. Portanto, é mais fácil fazer a limpeza em um local onde os dados são armazenados. Por outro lado, a coleta de lixo não é possível com o Struct, pois utiliza o valor por passagem e os dados são espalhados em locais diferentes.
  • Gerenciamento de memória: Como a classe permite coletas de lixo, o gerenciamento de memória também é eficaz; no entanto, não é tão eficaz com Structs.
  • Construtor: Um construtor geralmente inicializa a classe com certos valores especificados. Podemos olhar para ele como algo que foi inicializado com valores. Se uma nova classe precisar ser criada, o construtor é chamado para alocar memória para essa instância. Podemos até passar valores como argumentos enquanto chamamos um construtor. Vamos agora à nossa discussão atual. Classes permitem construtores de todos os tipos, como com ou sem argumentos, enquanto estruturas permitem apenas os construtores com argumentos, ou seja, os construtores parametrizados.
  • Destruidor: Um destruidor é chamado sempre que precisamos excluir uma instância de uma classe. O destruidor, por sua vez, exclui essa instância e libera memória. Uma classe pode usar um destruidor, enquanto uma estrutura não pode.
  • Inicialização de variáveis ​​de membro: Em Classes, podemos inicializar as variáveis ​​de membro diretamente; essa inicialização não é possível com Structs.
  • Criação de Objetos: A sintaxe geral para criação de objeto nas classes é:

Demonstração obj = new Demo ();

Isso significa que devemos usar a palavra-chave 'novo' ao criar objetos de uma classe. Isso não é necessário ao criar objetos do Structs. Basta dar uma olhada na sintaxe deles:

Demonstração obj;

Funciona perfeitamente mesmo sem a palavra-chave 'novo'.

Quando usar classe e quando usar Struct?

Como as classes são mais flexíveis na entrega de dados e funções juntos, podemos fazê-lo quando os objetos usados ​​são complexos e grandes. No nosso exemplo, um Shopping pode usar a classe 'store' para expressar o sistema de uma maneira melhor. As estruturas, no entanto, são restritas a objetos menores, pois são comparativamente menos eficazes que as Classes. Portanto, se você criar uma loja de sua preferência, o Structs será a melhor escolha.

Como converter uma estrutura em uma classe e vice-versa?

Você pode ter ouvido os termos 'boxe' e 'unboxing' para converter um Struct em uma classe e vice-versa. Embora sejam processos eficazes para nos ajudar na conversão, eles devem ser tratados com cautela. Como isso afeta diretamente os locais da memória, há um enorme impacto no desempenho do nosso sistema. Além disso, afeta os processos de coleta de lixo e resulta em ineficiência geral do sistema. Portanto, use essas conversões somente quando necessário.

Vejamos as diferenças acima mencionadas na forma de tabela.

S.No Conceitos Diferenças
Classe Struct
1 Reutilização Completamente reutilizável Não reutilizável
2 Visibilidade Todas as funções de uma classe são visíveis para seus objetos Os dados de um objeto de uma estrutura não são visíveis para outros objetos da mesma estrutura
3 Passar por referência e passar por valor Usa o passe por referência Usa o passe por valor
4 Herança As funções de uma classe podem ser herdadas por suas subclasses; permite herança Nunca permite herança
5 Visibilidade padrão Todos os membros de uma classe são privados por padrão Todos os membros de um Struct são públicos por padrão
6 Tamanho Quando Vazio O tamanho de uma classe vazia é 1 byte O tamanho da estrutura vazia é 0 bytes
7 Coleta de lixo Como usa passagem por referência, a coleta de lixo é possível Como utiliza a passagem por valor, a coleta de lixo não é possível
8 Gerenciamento de memória A facilidade do processo de coleta de lixo ajuda no gerenciamento eficaz da memória A falta de coleta de lixo resulta em mau gerenciamento de memória
9 Construtores Permite construtores de todos os tipos, como com ou sem parâmetros Permite apenas construtores parametrizados
10 Destrutores Pode usá-lo Não pode usá-lo
11 Inicialização de variáveis ​​de membro Permite inicialização direta de variáveis ​​de membro Não permite a inicialização direta de palavras das variáveis ​​de membro
12 Criação de Objetos É necessário usar a palavra-chave 'novo' durante a criação do objeto É opcional usar a palavra-chave 'novo' durante a criação do objeto
13 Quando usar? Melhor para objetos maiores e complexos em que a herança é necessária Melhor para objetos menores e mais simples, onde a herança é menos importante.

Quase abordamos todas as diferenças entre Class e Struct e, se você sentir que algo está faltando, informe-nos. Vamos aprender juntos e aproveitar ao máximo esse conhecimento!