Je dois ajouter un objet de classe en tant que membre dans une structure C. p>
Y a-t-il une interdiction de le faire? p>
Cordialement, isight p>
4 Réponses :
Non, il n'y a pas. Découvrez cet exemple:
#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;
}
Toutefois, en fonction du maquillage de la classe, la structure peut perdre du statut de POD qui limitera certaines opérations qui auraient pu être effectuées autrement sur la structure.
Que voulez-vous dire par pod? Pouvez-vous clarifier le terme pour moi? Jamais entendu parler.
Non ce que je veux dire, c'est l'inverse du cas que vous avez mis ici. classe dans la structure. OK, laissez ceci être un projet C ++, pour être précisément.
Je suppose que vous parlez de C ++, car il n'y a pas de concept de "classe" en C - bien que vous puissiez avoir certainement un En dehors d'un détail sans importance, Si vous êtes intéressé, la seule différence est l'accessibilité par défaut des membres et des classes de base; struct code> en tant que membre d'un autre struct code>. p>
classe code> et struct code> sont identiques et sont souvent appelés "types de classe". Tout ce que vous pouvez faire avec une classe code> (tel qu'un membre de type de classe), vous pouvez également faire avec un struct code>. P>
publique code> pour struct code> et privé code> pour classe code>. p>
Tant que la structure est juste utilisée dans le code C ++, il n'y a pas de problème. Toutefois, si la structure est transmise au code C, les mauvaises choses peuvent arriver (les destructeurs non appelés lorsqu'ils sont libérés / supprimés). P>
Si vous ne voyez rien comme extern "C" dans le fichier de déclaration, vous êtes probablement en sécurité. P>
Vous pouvez avoir un membre de classe C ++ en C, mais il doit être considéré comme un Cette technique s'appelle pointeur opaque . p> vide * code> dans le point de vue C, de sorte que le C puisse le gérer correctement. P>
Vous avez étiqueté votre question C et C ++. En C ++, il est certainement possible que la structure est juste une sorte de classe. En C, c'est bien sûr impossible.
Comme la structure est plus sujette à "C", j'ai marqué avec c aussi.