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