web-dev-qa-db-fra.com

Définition de classe imbriquée dans le fichier source

Si j'ai une classe imbriquée comme ceci:

  class MyClass
  {
    class NestedClass
    {
    public:
      // nested class members AND definitions here
    };

    // main class members here
  };

Actuellement, les définitions de MyClass sont dans le fichier CPP mais les définitions de NestedClass sont dans le fichier d'en-tête, c'est-à-dire que je ne peux pas déclarer les fonctions/constructeurs dans le fichier CPP.

Ma question est donc de savoir comment définir les fonctions de NestedClass dans le fichier cpp? Si je ne peux pas, quelle est la raison (et si tel est le cas, j'ai une vague idée de pourquoi cela se produit mais je voudrais une bonne explication)? Et les structures?

33
Samaursa

Vous pouvez. Si votre classe interne a une méthode comme:

  class MyClass   {
    class NestedClass
    {
    public:
      void someMethod();
    };

    // main class members here
  };

... alors vous pouvez le définir dans le fichier .cpp comme ceci:

void MyClass::NestedClass::someMethod() {
   // blah
}

Les structures sont presque la même chose que les classes en C++ - par défaut, elles sont "publiques" pour leur accès. Ils sont traités à tous les autres égards, tout comme les cours.

Vous pouvez (comme indiqué dans les commentaires) déclarez simplement une classe interne, par exemple:

class MyClass   {
    class NestedClass;
    // blah
};

..et définissez-le ensuite dans le fichier d'implémentation:

class MyClass::NestedClass {
  // etc.
};
52
sje397