8
votes

y compris la classe en tant que membre dans la structure

Je dois ajouter un objet de classe en tant que membre dans une structure C.

Y a-t-il une interdiction de le faire?

Cordialement, isight


2 commentaires

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.


4 Réponses :


0
votes

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;
}


3 commentaires

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.



4
votes

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 struct en tant que membre d'un autre struct .

En dehors d'un détail sans importance, classe et struct sont identiques et sont souvent appelés "types de classe". Tout ce que vous pouvez faire avec une classe (tel qu'un membre de type de classe), vous pouvez également faire avec un struct .

Si vous êtes intéressé, la seule différence est l'accessibilité par défaut des membres et des classes de base; publique pour struct et privé pour classe .


0 commentaires

0
votes

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).

Si vous ne voyez rien comme extern "C" dans le fichier de déclaration, vous êtes probablement en sécurité.


0 commentaires

1
votes

Vous pouvez avoir un membre de classe C ++ en C, mais il doit être considéré comme un vide * dans le point de vue C, de sorte que le C puisse le gérer correctement.

Cette technique s'appelle pointeur opaque .


0 commentaires