? La pregunta lo dice todo realmente. ¿Se me permite derivar una clase de una estructura, o debo crear una clase que incruste mi estructura y defina los constructores de copia y un operador = para moverme entre las dos?en C++, ¿puedo obtener una clase de una estructura
Respuesta
En C++ struct
es (casi) un class
(excepto en el nivel de acceso predeterminado diferente), así que sí, puede.
struct A {
// fields are public by default
};
class B: public A {
// fields are private by default
};
No estoy familiarizado con MFC, pero parece un intento de mantener tanto la API de C y C++.
Gracias por eso. Estaba bastante seguro de que estaba bien, pero nunca lo había visto en la práctica. –
Por supuesto que sí. Lo que es diferente con respecto a la herencia es que si defines una clase, heredará privada de otras clases/estructuras. Si se define una estructura y derivarla de una clase o estructura, que será una herencia pública por defecto:
// the following two are equivalent except that one time class is
// used and the other time struct
struct f : g { };
class f : public g { };
Si usted se pregunta cómo se debe envolver C estructuras - Me gustaría incorporarlos como miembro en la clase . Debido a que las estructuras C no fueron diseñadas para ser heredadas de (piense en el destructor protegido ni virtual en las estructuras C - no pueden tener uno). Son agregados simples que recopilan datos. Y ponerlos como miembros los usa como tales (como en "un punto tiene un par de coordenadas x e y").
Las estructuras C también exponen a los miembros que posiblemente no deberían estar expuestos en la clase. La contención permite un control preciso de lo que está expuesto y lo que no por las funciones de obtener/establecer y aún así puedes dejar que te dé una copia o referencia al objeto desnudo C struct contenido.
Sí. puedes derivar una clase de una estructura. En C++, una estructura es simplemente una clase donde el acceso predeterminado es público en lugar de privado. Derivar una clase de una estructura que solo agrega funciones miembro no viruales y/o funciones estáticas es una técnica útil para proporcionar una interfaz C++ mientras se mantiene la compatibilidad con una API de estilo C.
Este es exactamente el enfoque utilizado por MFC para muchas de las estructuras C (al contrario de lo que usted dice en su pregunta).
Por ejemplo, la clase CRect se deriva públicamente de struct tagRECT (el nombre más comúnmente utilizado RECT es un tipodedf para struct tagRECT). Debido a que struct tagRECT define todos los miembros de datos, y CRect agrega solo funciones de miembros no virtuales, el diseño de memoria de CRects y RECT es idéntico: puede usar un CRect como argumento para cualquier función que se espere un RECT y viceversa.
- 1. ¿Cómo puedo obtener la dirección de una estructura en C?
- 2. ¿Puedo destruir una estructura en C++?
- 3. define una estructura dentro de una clase en C++
- 4. ¿Puedo 'extender' una estructura en C?
- 5. Obtener la dirección de una propiedad Objective-c (que es una estructura C)
- 6. ¿Cómo puedo ocultar la declaración de una estructura en C?
- 7. utilizando una interfaz estática int en una estructura/clase
- 8. ¿Puedo obtener el tamaño de un campo de estructura sin crear una instancia de la estructura?
- 9. ¿Cuándo debería usar una estructura en lugar de una clase?
- 10. C/C++ ¿Es posible obtener una "lista" de miembros de instancia al consultar una clase?
- 11. "Sobrecarga" de Clase vs Estructura en C#?
- 12. ¿puedo poner un selector Object-C en una estructura?
- 13. casting una estructura de C en otro
- 14. Objetivo C ¿Clase o estructura?
- 15. Estructura en una estructura
- 16. ¿Puedo obtener CONST definido en una clase de PHP?
- 17. ¿Dónde puedo obtener una lista de caracteres Unicode por clase?
- 18. ¿Cómo se compila una clase vacía y una estructura vacía?
- 19. ¿Cómo puedo obtener una visión general rápida sobre una estructura de tabla en SQLite?
- 20. ¿hay alguna diferencia entre una estructura en C++ y una estructura en C#?
- 21. C: Haciendo una copia profunda de una estructura ... haciendo una copia superficial de una estructura
- 22. matrices multidimensionales en una estructura en C#
- 23. cómo inicializar una estructura estática en C++?
- 24. C++ ¿cómo eliminar una estructura?
- 25. ¿Cómo puedo crear una nueva instancia de clase de una clase dentro de una clase (estática)?
- 26. ¿Cuándo necesito una clase anónima en C++?
- 27. ¿Asignar una lista de valores a una estructura en C#?
- 28. Reenviar declarar una estructura en Objective-C
- 29. ¿Cómo asignar una estructura C en línea?
- 30. Definir una estructura en C con Malloc
La clase de MFC CRect hereda de struct tagRECT, AFAICS. – Constantin
Mi mal texto ha cambiado. –