Struct ou Class qual usar e qual a diferença;

429 views
Skip to first unread message

Daniel Dias Dos Santos

unread,
Dec 27, 2012, 6:37:01 AM12/27/12
to ccppb...@googlegroups.com
Bom Dia, estou com uma duvida em Class e Struct ,qual a diferença?

pois sei que struct tem membros e classes tem metodos.

exe de Class:

#include<iostream>
using namespace std;
int main()
{
class dados
{
public:
int dia,mes,ano ;
};



dados dado;

dado.dia = 21 ;
dado.mes = 12;
dado.ano = 2012;
cout<<dado.dia<<"/"<<dado.mes<<"/"<<dado.ano;
}



exemplo de struct


#include<iostream>
using namespace std;
int main()
{
struct  dados
{

int dia,mes,ano ;
};



dados dado;

dado.dia = 21 ;
dado.mes = 12;
dado.ano = 2012;
cout<<dado.dia<<"/"<<dado.mes<<"/"<<dado.ano;
}

Bruno Sanches

unread,
Dec 27, 2012, 6:40:31 AM12/27/12
to ccppb...@googlegroups.com
Daniel, na prática são iguais, tudo que você faz com classe pode fazer com struct.

A diferença é que na struct, todos os membros são públicos por padrão, na classe todos são privados por padrão.

Geralmente (mas não é regra ou limitação) structs são utilizadas para representar estrutura de dados simples, que geralmente só possuem alguns poucos atributos, sem métodos, construtores, etc.

T+

Bruno Sanches
========================
http://www.pontov.com.br


2012/12/27 Daniel Dias Dos Santos <daniel.dias...@gmail.com>
--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~---------------------------------~----------~--~----~
[&] Colabore com a Pesquisa de Preferência de Conteúdo
para Eventos do Grupo C & C++ Brasil:
http://www.surveymonkey.com/s/GBBGTXN
------~----~-------~---~---~---~---~----------------~------------~---------~
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-...@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
Emprego & carreira: vag...@ccppbrasil.org
http://groups.google.com/group/dev-guys?hl=en

Ponto V! - Vinícius Godoy

unread,
Dec 27, 2012, 6:46:38 AM12/27/12
to ccppb...@googlegroups.com
Do ponto de vista de implementação:
Class tem as coisas por privadas por padrão.
Struct tem as coisas publicas.

Do ponto de vista de conceito, são coisas bem diferentes.
Structs são um conjunto de dados que se mantém juntos. Dificilmente colocamos nelas métodos (salvo os casos que as usamos como uma forma sintaticamente conveniente de criar functors, o que deve acabar com a entrada do lambda no c++11).

Já classes representam objetos e, além de dados, contém operações, herança e todo aquele resto que você estuda nas aulas de UML e OO. 


Note que no C++, é muito comum que as implementações não imponham diretamente os conceitos, como é o caso de outras linguagens, como o Java ou C#. Uma interface, em C++, nada mais é do que uma classe só com métodos virtuais puros (não existe a palavra chave interface). Uma struct permite herança, métodos e atributos privados e, pode, inclusive, representar classes. Por isso é importante, em C++, ter claro em sua mente a distinção conceitual das coisas. É o programador que deve expressar esses conceitos, não a linguagem que irá força-los.

Att,

Vinícius Godoy de Mendonça
@vinigodoy

Ponto V! - Programação de Jogos Profissional
www.pontov.com.br - @pontov - Facebook



alexandre soares

unread,
Dec 27, 2012, 7:42:21 AM12/27/12
to ccppb...@googlegroups.com
Realmente a diferença é somente conceitual, quando estamos falando em
ambiente c++ (compilador) não ha diferenças pois em tempo de
compilação, o compilador transforma o struct em classe e seus membros,
em atributos publicos desta classe. Struct so fara diferença se vc
usar um compilador C (puro), não orientado a objeto.

On 12/27/12, Ponto V! - Vinícius Godoy <vini...@pontov.com.br> wrote:
> Do ponto de vista de implementação:
> Class tem as coisas por privadas por padrão.
> Struct tem as coisas publicas.
>
> Do ponto de vista de conceito, são coisas bem diferentes.
> Structs são um conjunto de dados que se mantém juntos. Dificilmente
> colocamos nelas métodos (salvo os casos que as usamos como uma forma
> sintaticamente conveniente de criar functors, o que deve acabar com a
> entrada do lambda no c++11).
>
> Já classes representam objetos e, além de dados, contém operações, herança
> e todo aquele resto que você estuda nas aulas de UML e OO.
>
>
> Note que no C++, é muito comum que as implementações não imponham
> diretamente os conceitos, como é o caso de outras linguagens, como o Java
> ou C#. Uma interface, em C++, nada mais é do que uma classe só com métodos
> virtuais puros (não existe a palavra chave interface). Uma struct permite
> herança, métodos e atributos privados e, pode, inclusive, representar
> classes. Por isso é importante, em C++, ter claro em sua mente a distinção
> conceitual das coisas. É o programador que deve expressar esses conceitos,
> não a linguagem que irá força-los.
>
> Att,
>
> *Vinícius Godoy de Mendonça*
> @vinigodoy <http://twitter.com/#%21/vinigodoy>
>
> Ponto V! - Programação de Jogos Profissional
> www.pontov.com.br - @pontov <http://twitter.com/#%21/pontov> -
> Facebook<http://www.facebook.com/PontoV>

Felipe Magno de Almeida

unread,
Dec 27, 2012, 7:45:12 AM12/27/12
to ccppb...@googlegroups.com
Essa pergunta já foi feita e respondida algumas vezes no grupo. Você
pode buscar nos archives do grupo.

2012/12/27 Daniel Dias Dos Santos <daniel.dias...@gmail.com>:
> --
> Antes de enviar um e-mail para o grupo leia:
> http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
> --~--~---------~--~----~---------------------------------~----------~--~----~
> [&] Colabore com a Pesquisa de Preferência de Conteúdo
> para Eventos do Grupo C & C++ Brasil:
> http://www.surveymonkey.com/s/GBBGTXN
> ------~----~-------~---~---~---~---~----------------~------------~---------~
> [&] C & C++ Brasil - http://www.ccppbrasil.org/
> Para sair dessa lista, envie um e-mail para
> ccppbrasil-...@googlegroups.com
> Para mais opções, visite http://groups.google.com/group/ccppbrasil
> --~--~---------~--~----~--~-~--~---~----~-----------------~--~----------~
> Emprego & carreira: vag...@ccppbrasil.org
> http://groups.google.com/group/dev-guys?hl=en



--
Felipe Magno de Almeida

Fabio A Mazzarino

unread,
Dec 27, 2012, 7:54:00 AM12/27/12
to ccppb...@googlegroups.com
Só complementando oq o Bruno e o Vinicius falaram.

A principal diferença entre struct e class é simplesmente semântica.

É possível fazer uma implementação como vc fez e obter o mm resultado. Porém a struct é mais apropriada para armazenar somente dados e classe é mais apropriada para armazenar dados e seus respectivos métodos.

Fabio

Doses Diárias - Achados de um Programador na Internet
http://dosesdiarias.seucaminho.com


2012/12/27 Bruno Sanches <bcsa...@gmail.com>

Rodrigo Madera

unread,
Dec 27, 2012, 8:19:32 AM12/27/12
to ccppb...@googlegroups.com
Meu Deus, quanta balela...

Queria um real por cada vez que isto é perguntado e mais outro por cada vez que tentam dar significados diferentes para as palavras.


http://www.parashift.com/c++-faq/struct-vs-class.html

The members and base classes of a struct are public by default, while in class, they default to private. Note: you should make your base classes explicitly public,private, or protected, rather than relying on the defaults.

struct and class are otherwise functionally equivalent.

OK, enough of that squeaky clean techno talk. Emotionally, most developers make a strong distinction between a class and a struct. A struct simply feels like an open pile of bits with very little in the way of encapsulation or functionality. A class feels like a living and responsible member of society with intelligent services, a strong encapsulation barrier, and a well defined interface. Since that's the connotation most people already have, you should probably use the struct keyword if you have a class that has very few methods and has public data (such things do exist in well designed systems!), but otherwise you should probably use the class keyword.



Mx


2012/12/27 Fabio A Mazzarino <fabio.m...@gmail.com>
Reply all
Reply to author
Forward
0 new messages