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.
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.
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++.
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.
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: