Diferença entre classe e estrutura Diferença entre

Anonim

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

O que é classe e objeto:

Estes são os dois conceitos importantes relacionados à programação orientada a objetos, e eles formam a base para enquadrar as funções e a passagem de dados 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 mercearias, artigos de 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 um design específico, iluminação, etc. Através dos objetos, podemos realmente usar a classe; eles formam as instâncias de uma classe.

Sintaxe de uma Classe

Class Store {

coisas de cadeia pública;

design público de cordas;

}

Sintaxe de um Objeto

Store grocery = new Store ();

Loja de papelaria = nova loja ();

O que é uma estrutura?

A Struct inclui apenas os dados e, portanto, é útil para enquadrar os requisitos individuais de dados através dos objetos Struct. Ao contrário de uma classe, ela não possui funções. Aqui está a sua sintaxe:

struct grocery_entrance {

char entrance_name [50];

int entrance_size;

} mercearia;

Todas as lojas podem usar a "entrada" da estrutura com nomes e tamanhos individuais.

O que é a herança?

É semelhante a como um filho herda as posses de seu pai e, por sua vez, o filho também pode adicionar algumas outras posses próprias. A Classe pode ser uma classe base ou uma classe derivada, na qual o primeiro pode ser tomado como base para formar o último. A classe derivada adiciona algumas outras propriedades para si, além do que obtém da classe base. Quando consideramos o exemplo acima, o supermercado ainda pode ser derivado para um supermercado específico, como o supermercado 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: À medida que as classes formam o quadro básico, elas podem ser reutilizadas; Os Structs, no entanto, são elementos individuais com propriedades específicas, portanto não podem ser reutilizados. Por exemplo, a classe de supermercado pode ser usada para qualquer tipo de supermercado, mas o Struct grocery_entrance é específico para isso sozinho e não há nenhum motivo para reutilizá-lo em outras classes.
  • Visibilidade: Todas as funções em uma classe estão publicamente disponíveis para seus Objetos.Por exemplo, temos uma função chamada '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 da estrutura são restritos a si mesmos e não visíveis para outras Estruturas. Para deixar as coisas claras, podemos dizer que os dados de "mercearia" não são publicamente visíveis para todas as outras lojas.
  • Passe por referência e passagem por valor: Passe por referência está enviando apenas a localização da memória e não os dados reais para as funções. Isso significa que sempre que o valor muda, a mudança é refletida nas funções correspondentes. Passar por valor, por sua vez, está apenas enviando o valor para a função. Nesse caso, uma alteração no valor depois de ser enviada não será refletida na função. A classe usa pass by reference e o Struct usa valor de passagem.
  • Herança: As classes podem ser mais herdadas para formar sub-classes, mas as Estruturas não podem utilizar a herança. Por exemplo, a Class Store dá suas funções ao "supermercado de subcategoria". Mas o Struct 'grocery_entrance' não pode herdar nenhuma função. Podemos dizer que não existe um conceito como sub-struct aqui.
  • Visibilidade padrão: Todos os membros de uma Classe são mantidos como entidades privadas por padrão, enquanto os membros de um Struct são mantidos como entidades públicas por padrão.
  • O tamanho de uma Classe vazia e Estrutura: Classe usa um tamanho de 1 Byte mesmo quando está vazio, enquanto a Struct nunca usa nenhuma memória quando está vazia. 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 Classes, pois eles usam pass by reference. 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 usa o valor de passagem e os dados são espalhados em diferentes locais.
  • Gerenciamento de memória: Como a Classe permite coleções de lixo, o gerenciamento de memória também é efetivo; no entanto, não é tão eficaz com as Estruturas.
  • Construtor: Um construtor geralmente inicializa a classe com determinados valores especificados. Podemos ver como algo que foi inicializado com valores. Se uma nova classe tiver que ser criada, o construtor é chamado para alocar memória para essa instância. Podemos mesmo passar valores como argumentos ao chamar um construtor. Vejamos agora a nossa discussão atual. As classes permitem construtores de todos os tipos, como com ou sem argumentos, enquanto as estruturas apenas permitem que os construtores com argumentos, i. e. os construtores parametrizados.
  • Destrutor: Um destruidor é chamado sempre que precisamos excluir uma instância de uma classe. O destruidor, por sua vez, elimina essa instância e liberta memória. Uma Classe pode usar um destruidor, enquanto um Struct não pode.
  • Inicialização de variáveis ​​de membros: Em classes, podemos inicializar as variáveis ​​de membros diretamente; Tal inicialização não é possível com o Structs.
  • Criação de objeto: A sintaxe geral para criação de objetos em classes é:

Demo obj = new Demo ();

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

Demo obj;

Funciona perfeitamente mesmo sem a palavra-chave "nova".

Quando usar classe e quando usar Struct?

À medida que as Classes são mais flexíveis ao entregar dados e funções juntas, podemos buscá-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 efetivas que as Classes. Portanto, se você projetar uma loja própria, as Estruturas são a melhor escolha.

Como converter uma estrutura em uma classe e Vice Versa?

Você pode ter ouvido os termos 'boxing' e 'unboxing' para converter uma estrutura para uma classe e vice-versa. Embora estes sejam processos efetivos 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 em forma de tabela.

S. Não Conceitos Diferenças
Classe Estruturar
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 um Struct não são visíveis para outros objetos do mesmo Struct 3
Pass by Reference & pass by Value > Usa Passar por Referência Usos Passar por Valor 4 Herança
As funções de uma classe podem ser herdadas por suas subclasses; permite a herança Nunca permite a 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 do Struct vazio é 0 Bytes 7 Garbage Collection
Como ele usa passar por referência, a coleta de lixo é possível Como ele usa passar 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 efetivo de memória A falta de coleta de lixo resulta em pobre Gerenciamento de memória 9 Construtores
Permite construtores de todos os tipos, como com ou sem parâmetros Somente permite construtores parametrizados 10 Destruidores
Pode usá-lo Não é possível use 11 Inicialização de variáveis ​​de membros
Permite a inicialização direta de variáveis ​​de membros Não permite a inicialização direta de palavras de variáveis ​​de membros 12 < Criação de objeto É uma obrigação usar a palavra-chave 'nova' durante a criação do objeto
É opcional usar a palavra-chave 'nova' durante a criação do objeto 13 Quando usar? Melhor para objetos maiores e complexos onde a herança é necessária
Melhor para objetos menores e mais simples, onde a herança é de menor importância. Nós quase cobrimos todas as diferenças entre Class e Struct, e se você sente que algo está faltando, informe-nos. Vamos aprender juntos e tirar o máximo proveito desse conhecimento!