Tengo que agregar un objeto de clase como miembro dentro de una estructura c.incluyendo clase como miembro en struct
¿Hay alguna prohibición de hacer esto.
Saludos, iSight
Tengo que agregar un objeto de clase como miembro dentro de una estructura c.incluyendo clase como miembro en struct
¿Hay alguna prohibición de hacer esto.
Saludos, iSight
PUEDE tener un miembro de la clase C++ en C, pero debe verse como un void*
en el punto de vista C, para que la C pueda manejarlo bien.
Esta técnica se llama Opaque Pointer.
n no lo hay. Echa un vistazo a este ejemplo:
#include<iostream>
class Foo {
public:
Foo() {
this->i = 1;
}
int i;
};
struct Bar {
Foo foo;
};
int main() {
struct Bar bar;
std::cout << bar.foo.i << std::endl;
return 0;
}
Sin embargo, dependiendo de la composición de la clase, la estructura puede perder el estado POD, lo que restringirá algunas operaciones que de otro modo podrían haberse realizado en la estructura. –
¿Qué quieres decir con POD? ¿Puedes aclarar el término para mí? Nunca lo oí. – Kungi
POD = [datos antiguos simples] (http://en.wikipedia.org/wiki/Plain_old_data_structure). – gr0v3r
Voy a asumir que estamos hablando de C++, ya que no existe el concepto de una "clase" en C - aunque ciertamente puede tener un struct
como miembro de otra struct
.
Aparte de un detalle sin importancia, y class
struct
son idénticos, y ambos se refieren a menudo como "tipos de clase". Cualquier cosa que pueda hacer con un class
(como tener un miembro del tipo de clase), también puede hacerlo con un struct
.
Si le interesa, la única diferencia es la accesibilidad predeterminada de los miembros y las clases base; public
para struct
y private
para class
.
Mientras que la estructura solo se use en código C++, no hay problema. Sin embargo, si la estructura se pasa al código C, pueden ocurrir cosas malas (el destructor no se llama cuando struct se libera/elimina).
Si no ve nada como extern "C" en el archivo de declaración, probablemente esté seguro.
Ha etiquetado su pregunta C y C++. En C++ es ciertamente posible ya que struct es solo un tipo de clase. En C es por supuesto imposible. –
Como struct es más propenso a "C" etiquetado con C también. – boom