LINUX.ORG.RU

идеология оформления программ на C++ в Java-стиле


0

0

Какие плюсы/минусы в написании классов на C++ также как и на Java, т.е.:

1) не разделяя файлы на .h и .cpp;

2) реализуя код прямо в описании класса?

Как-то была задача: портировать небольшую програмку с Java на C++. Переписал почти один в один, меняя только названия стандартных функций/классов и дописывая освобождение памяти. Скомпилировалось без проблем и warning'ов, работало тоже нормально.

Кто что думает по этому поводу? Никто не пробовал извращаться подобным образом с большими проектами, где много файлов?

anonymous

Как минимум  - будет не удобно смотреть код. (Особенно если это 
библиотека какая).

Так же если это библиотека или что-то чьи заголовки могут быть нужны 
еще кому-то, то сложно придумать что-то лучшее чем .h файлы.

Ну и в закрытом виде тожэе распространять сложно.

Часть вещей обычно легче в библиотеки компилировать, а к ним по-любому
заголовки нужны.

alexru ★★★★
()

Обсуждали пару дней назад.
Функции определённые в хидере будут использоваться как инлайн.

kitov ★★★
()
Ответ на: комментарий от kitov

+ статические переменные все равно придется определять в cpp

ukez
()

ну если написаный код не тиражируется, то Бог стобой...

это не извращение - это безграмотность

Pi ★★★★★
()

siljno udarit po vremeni compilyacii

aton
()

В C/C++ необходимо использовать файлы заголовков, т.к. директива препроцессора #include это не то же самое, что java-директива import. У них совершенно разные принципы работы.

В итоге ты получишь множество статически слинкованных библиотек.

Eldhenn
()

Для небольшой программы это совершенно нормально. Возможно легкое раздувания полученных бинарей за счет inline методов там, где они не должны быть inline. Это, впрочем, лечится ключами компилятора.

Для больших проектов со множеством файлов и зависимостей такой подход следует применять дифференцированно. А именно, в заголовочных файлах реализации методов писать чаще всего не получится, т.к. если метод виртуальный, то inline он уже не будет; с дрйгой стороны, каждый .cpp файл, который включает такой header, будет фактически реализовывать приписанные в этом header'е методы. Это приведет к тому, что при компоновки будут проблемы вида multiply defined symbols. Т.е. первый вывод такой: реализации методов в header'ах разумно указывать только небольших невиртуальных методов, которые должны быть inline - иначе проект, скорее всего, не соберется.

С другой стороны, если в header'е определен только интерфейс, т.е. класс с только pure virtual методами, то в .cpp файле с реализацией можно - и, более того, очень удобно, - определять класс реализации этого интерфейса в Java-стиле. Это, правда, будет означать, что класс реализации будет скрыт от посторонних глаз, будет виден только внутри этого .cpp файла, и для его создания необходимо будет написать специальную функцию (фабрику), которую придется также объявить в header'е с объявлением интерфейса. Кроме того, от такого класса нельзя будет пронаследовать другой класс в другом файле - т.е. в терминах Java получится что-то вроде final реализации.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.