Определение вложенного класса в исходном файле
Если у меня есть вложенный класс, например, так:
class MyClass
{
class NestedClass
{
public:
// nested class members AND definitions here
};
// main class members here
};
В настоящее время определения MyClass
находятся в CPP
файл, но определения для NestedClass
находятся в файле заголовка, то есть я не могу объявить функции / конструкторы в CPP
файл.
Итак, мой вопрос, как я могу определить функции NestedClass
в файле cpp? Если я не могу, в чем причина (и если это так, у меня есть смутное представление о том, почему это происходит, но я хотел бы получить хорошее объяснение)? А как насчет структур?
1 ответ
Вы можете. Если у вашего внутреннего класса есть такой метод:
class MyClass {
class NestedClass
{
public:
void someMethod();
};
// main class members here
};
... тогда вы можете определить его в файле.cpp следующим образом:
void MyClass::NestedClass::someMethod() {
// blah
}
Структуры - это почти то же самое, что и классы в C++ - по умолчанию они имеют значение public для доступа. С ними во всех остальных отношениях обращаются так же, как с классами.
Вы можете (как отмечено в комментариях) просто объявить внутренний класс, например:
class MyClass {
class NestedClass;
// blah
};
..и затем определите это в файле реализации:
class MyClass::NestedClass {
// etc.
};