2009-02-12 24 views
17

¿Cuándo alguien debería usar structs en lugar de clases o viceversa en C++? Me encuentro usando estructuras cuando una clase completa que maneja cierta información parece exagerada pero quiero indicar que la información contenida está relacionada. Me preguntaba cuáles son algunas buenas pautas para poder decir cuándo una es más apropiada que la otra.Estructuras vs clases en C++

Editar

: encuentre este tipo de enlaces, mientras que la lectura del material de desbordamiento de pila indicado se relacionó después de la pregunta fue presentada:

When should you use a class vs a struct in C++?
What are the differences between struct and class in C++?

+0

por lo que este es un duplicado luego – ChrisW

Respuesta

14

Técnicamente, la única diferencia entre los dos es que las estructuras son públicos: por defecto y las clases son privadas:

Aparte de eso, no hay ninguna diferencia técnica.

estructura vs clase se convierte en un matiz puramente expresivo del idioma.

Por lo general, evitas poner métodos complicados en una estructura, y la mayoría de las veces los miembros de las estructuras de datos se mantendrán públicos. En una clase, quiere aplicar una encapsulación fuerte.

struct = datos es pública, con métodos auxiliares muy simples

class = fuertemente encapsulado, los datos se modifica/visitada sólo a través de métodos

+0

Sin embargo, el OP estaba pidiendo pautas, que dependen del matiz expresivo. –

2

utilizar una clase si tiene métodos, una estructura si no se .

Una clase debe ocultar todas sus partes internas solo exponiendo métodos o propiedades. Una estructura tiende a exponer todas sus partes internas y no tiene métodos de acceso.

Donde solo un bit de código está accediendo a algunos datos (relacionados), una estructura puede ser perfectamente razonable. Donde múltiples bits de código necesitan modificar los datos o si es algo complicado, una clase sería una mejor opción.

5

utilizo estructuras para recipientes simples de tipos que proporcionan no hay constructores u operadores .

Clases para todo lo demás.

1

La diferencia entre Clases y Estructuras es que las estructuras son grupos de variables y las clases representan objetos. Los objetos tienen atributos Y métodos y forman parte de una jerarquía.

Si usa C++ para aprovechar las capacidades de OO, es mejor utilizar clases/objetos que sean más naturales.

+0

mejor respuesta que he visto "las estructuras son grupos de variables y las clases representan objetos" – Glolita

0

Personalmente, yo uso estructuras cuando todo lo que necesito es un contenedor de datos (no hay funciones miembro). De lo contrario, uso clases.

La única vez que hago una excepción a esa regla es si necesito un functor simple: p.

struct compare { bool operator() { ... } }; 
sort(v.begin(), v.end(), compare()); 

La necesidad de una etiqueta public: sería simplemente el desorden de la innecesariedad de código.

+0

Eso es más o menos la directriz de google C++. No es que siga/me gusta sus pautas en muchos otros aspectos. –

0

structs en C++ son las clases con un método de acceso predeterminado de público, por lo que técnicamente distinto del predeterminado no hay diferencia y puede usar ambos de manera equivalente.

embargo, hay algunas expectativas y tendencias naturales, en parte debido a estructuras en C++ provienen de C.

Mi enfoque: Si se tiene ningún dato privado, un constructor/destructor, o cualquier funciones miembro complejos (que hacen más que solo la conversión en set/get, etc.), use la clase.

1

Siempre utilizo la clase, incluso para los contenedores, por la coherencia. Es puramente una elección de estilo ya que la diferencia entre los dos es insignificante.

4

Use una estructura cuando simplemente necesita un "cubo de cosas" que no tiene invariantes lógicos que debe conservar. Usa una clase para cualquier otra cosa.

Vea también lo que C++ FAQ says on the subject.

1

Si necesita controlar el acceso a los datos, debe usar las clases. Si no le importa quién está accediendo a qué, y qué están almacenando allí, entonces una estructura es probablemente más apropiada.

Además, una clase es más apropiada si necesita verificar la integridad de los datos.

+1

Encontré dos votos a la baja en esta respuesta, que se ve perfectamente bien para mí. ¿Lo que da? –

+0

Me gana. ¿Obtuve algo mal aquí? Si estoy totalmente equivocado sobre esto, me gustaría saber cómo ... –

+0

thx. Realmente no me importa si es la respuesta mejor calificada; Solo quiero saber por qué estaba mal ... aparentemente, 2 personas pensaron que estaba un poco mal. Ah bueno. –