Есть ли способ переопределить класс для определения методов, которые только объявили это далеко?
Например. что-то вроде:
class A
{
void a();
void b() {}
}
class A
{
void a() {}
}
вместо
class A
{
void a();
void b() {}
}
A::a() {}
Причина в том, что я создал много кода с методами, определенными внутри определения класса, без использования заголовков. До сих пор у меня не было циклических ссылок, но в последнее время это необходимо. Я не люблю определять группы методов Type::method
синтаксис, так как только очень немногие методы должны быть известны до последнего определения класса.
Так что мне нравится что-то вроде backward declaration
, объявите или определите только несколько методов ранее для циклических ссылок и определите весь класс позже.
Нет, нет способа переопределить класс.
Согласно стандарту языка C ++ определения классов:
class-specifier:
class-head { member-specification_opt }
Стандарт прямо говорит, что спецификация члена должна быть полной в определении класса:
Членами класса являются члены данных, функции-члены (9.3), вложенные типы и перечислители. Спецификация члена в определении класса объявляет полный набор членов класса; ни один участник не может быть добавлен в другом месте.
Также в стандарте приведен пример переопределения класса:
struct S { int a; }; struct S { int a; }; // error, double definition
является плохо формируется потому что он определяет S дважды.
К сожалению, нет способа объявить класс снова, как только он будет закрыт }
,
Единственное, что вы можете сделать, это унаследовать и определить метод.
class B : public A { a() {} } ;