#cpp
Мне кажется немного дикой, неудобной, и осложняющей читабельность кода необходимость указывать имя_класса перед каждой функцией в файле реализации класса. файл A.hpp: class A { int func(int par); } файл A.cpp: int A::func(int par){ return par*2/4+1; } Чтобы упаковать реализацию функций в класс можно писать код в заголовках (получится аля в Java). Там же написано почему это не круто. class A { int func(int par){ return 2; }; } Может вам извесны другие варианты записи и организации кода?
Ответы
Ответ 1
Это проблема/фича модели компиляции языка C++. Дело в том, что C++ компилирует только .cpp-файлы, и из них каждый независимо. Это значит, что он при компиляции не знает, к чему относится данный текст, не знает контекста. Когда C++ видит методы файла, компилятор к этому моменту просмотрел сотни (это не преувеличение!) header'ов и видел предварительные описания сотен классов. Он не может просто так прикинуть, к какому из них относится данный метод. Даже если другой метод организации компиляции можно придумать (например, использовать как-нибудь препроцессор) метод, который вы описали, является привычным и практически единственным общепринятым методом организации исходного кода в C++. Поэтому любая другая организация кода вызовет скорее всего недоумение у ваших коллег. В других языках, например, C#, нету подобной особенности, потому что все функции определяются внутри класса. Проблем с компиляцией, как в указанном вами вопросе, не возникает, потому что для нахождения других классов не используется #include (который по сути является простой текстовой подстановкой), а двухпроходная и нераздельная компиляция: компилятор при чтении очередного .cs-файла не «забывает» то, что он видел в других файлах. В других, например, Javascript, проблема даже шире, потому что методы класса объекта могут быть определены где угодно и «появиться» в объекте на любом этапе его жизненного цикла.
Комментариев нет:
Отправить комментарий