2014-01-04 2 views
0

Есть ли способ переопределить класс для определения методов, которые только объявили это?Методы форматирования класса С ++

Например. что-то вроде:

class A 
{ 
    void a(); 
    void b() {} 
} 

class A 
{ 
    void a() {} 
} 

вместо

class A 
{ 
    void a(); 
    void b() {} 
} 

A::a() {}  

Причина в том, что я создал много кода с методами, определенными внутри класса Defintion, без использования заголовков. До сих пор у меня не было циклических ссылок, но в последнее время это необходимо. Я не люблю определять пучки методов с помощью синтаксиса Type::method, так как до последнего определения класса должно быть известно очень мало методов.

Мне нравится несколько как backward declaration, объявить или определить только несколько методов для циклических ссылок и определить весь класс позже.

+4

Как только классный тип закрыт '' '' 'it * не может * быть снова открыт. Закрытое определение - это * определение для единицы перевода. Вы уверены, что вам просто не нужно пространство имен? – WhozCraig

+0

Файлы заголовка, тип :: метод, пространство имен являются способами этого в ** C++ **, для всех нас. Если вам это не нравится, переключите язык на нечто более новое, например python. Вы избавитесь от всех этих объявлений, размер вашего кода будет в несколько раз меньше. – TPAKTOPA

+0

Я просто переориентирую проект, который я сделал в Java несколько лет назад .. так что язык хорошо выбран. Мне нужны преимущества производительности выделенных шаблоном объектов. – dronus

ответ

3

Нет, невозможно переопределить класс.

В соответствии со стандартом языка C++ определений классов является:

class-specifier: 
    class-head { member-specification_opt } 

Стандарт ясно говорит, что спецификация члена должна быть полной в определении класса:

Членов класса являются членами данных, функции-члены (9.3), вложенные типы и счетчики. Спецификация участника в определении класса объявляет полный набор членов класса; Ни одного члена не может быть добавлен в другое место.

Кроме того, стандарт дает пример переопределения класса:

struct S { int a; }; 
struct S { int a; }; // error, double definition 

является плохо образован, поскольку она определяет S дважды.

0

К сожалению, не существует способа объявить класс снова, если он закрыт }.

Единственное, что вы можете сделать, это наследование и определение метода.

class B : public A { a() {} } ; 
Смежные вопросы