Diferença entre Struct e Class

Bom dia pessoal, procurei no fórum e não encontrei nada encontrei muito a respeito sobre a diferença entre Struct e Class. Fazem dias que venho pesquisando na internet sobre e, mesmo assim, só encontro pessoas defendendo o uso de objetos, afirmando que estes são muito mais completos que os registros.

O que eu entendi nesta pesquisa foi:

Structs:

  • Structs são um conjunto de variáveis agrupadas;

  • Virtualmente ela é parecida com um objeto com a diferença que um objeto pode conter métodos.

Alguém aqui do fórum poderia me dar mais informações ?

Quando você falar em struct, você está falando de programação estruturada (struct(ure) = estrutura).
Vamos a algumas características de uma struct

#include <stdio.h>
struct person
{
   int age;
   float weight;
};

Para entender uma struct, você pode usar esse exemplo acima.
Basicamente, uma struct é um elemento que permite armazenar informações de diversos tipos (tipos primitivos, ponteiros, referências a outras structs).
Porém, sendo bem simplista, é só isso.
Você não consegue definir funcionalidades (métodos) a uma struct.

Ainda numa visão simplista, uma classe te permite definir atributos (onde valores são armazenados) e funcionalidades (métodos).

Porém, se você precisa decidir entre uma e outra, significa que há essa opção (você está desenvolvendo em C++ e não C, por exemplo). Logo, sugiro que opte por classes.

Na verdade eu ainda não desenvolvo, estudo apenas no tempo que sobra entre trabalho e faculdade. Quando estudei linguagem de programação na faculdade foi decepcionante, nada além do básico então comprei livros, curso online e comecei a estudar por fora.

Em todos os lugares eu vejo pessoas dizendo que em C++ devo preferir usar classes porém em vários códigos que leio vejo que os métodos de cadastro (em databases) de uma classe, muitas vezes, recebem como parâmetro uma struct e utilizam métodos get para definir os valores desta e então cadastrar no banco de dados.

Como você citou classes, imagino que estamos falando de C++.

Em C++ a diferença entre uma declaração de struct e class é que o nível de acesso padrão para structs é public e para class é private.

structs em C++ podem conter metodos, e tudo mais que você consegue colocar em um tipo definido usando class.

2 curtidas

Mas é essa a ideia. Você não fez uma faculdade para programar, fez, provavelmente, para ser analista, não? Logo, o objetivo é entender como funciona, de resto, fazer análise e indicar a um programadore o que ele deve fazer (funcionalidade) e não como ele deve fazer.

Olha, só vi C/C++ na faculdade mesmo.

Aí você precisa analisar o contexto geral. Como C++ compreende classes e structs, você pode ter uma classe com atributos do tipo struct, além disso, precisa ver a referência e o contexto do que está usando.

1 curtida

É, analisando sob o ponto de vista que você citou, faz todo sentido.

Bom deixa eu fazer uma sub - pergunta relacionada:

Classe é passado por referencia e Struct por valor em programação em C e C++ como funciona, porque uma Struct no mundo C# são utilizados na maioria dos primitivos.? Coloquei isso meio para esclarecer, acho eu que o fator importante é esse, mas, não sei em C e C++ como funciona.

Não posso afirmar com 100% de certeza, há ainda grande probabilidade do que eu escrever estar errado porém lembro que quando estudei estrutura de dados na escola o professor explicou-nos que todos, ou quase todos, os tipos de dados que temos derivam/utilizam struct. Na época era ensinado em sala as linguagens C# e Java então não sei se isto valeria para C/C++.

1 curtida

Não, em C++ não é assim.

Em C++ a única diferença entre usar struct e class para UDT é que o nível de acesso padrão em struct é público e em class é privado.

Exceto isso funcionam de forma exatamente igual, a instanciação de ambos pode ser feita na pilha, etc.

Ao igual que em C, em C++, a passagem é feita sempre por valor, exceto quando definido explicitamente que é uma referência usando o prefixo & no parâmetro.

Se você quer usar polimorfismo através de métodos virtuais, o que só faz sentido se você tem uma referencia (falando no sentido de conceito amplo de referencia), você instancia tanto o struct ou class na heap e obtêm um ponteiro pra ele.

5 curtidas

Ficou bem claro, acho que isso é um grande diferença. vlw

A única diferença que existe tecnicamente é como @Kronal muito bem explicou. Mas é bom tomar cuidado que essa questão de preferir classes, pois elas tem diferenças semanticas. Ou seja, seu significado para nós, humanos, é diferente.

Quando vc vê uma struct já imagina um tipo de dado mais simples do que quando ê classes. Bom, tem um artigo bem legal falando um pouco sobre essa diferença de significado. Segue o link:

4 curtidas

Entendi @wldomiciano, @Kronal. Obrigado pela ajuda de vocês :slight_smile:.

@wldomiciano chegando em casa vou dar uma estudada neste link hehehe , obrigado.

1 curtida