
В языке Java все объекты передаются по ссылкам, в то время как в C++ по умолчанию осуществляется передача объектов по значению. В Java, в отличие от C++, автоматического приведения типов не происходит; хотя новые функциональные возможности языка Java, такие как обобщения и автоупаковка, охватывают многие распространенные варианты приведения типов. Все методы в Java являются виртуальными, то есть реализация метода выбирается в соответствии с типом объекта, а не с типом ссылки. В C++ методы нужно явно объявлять как виртуальные. В Java определены размеры базовых типов данных, в то время как в C++ они зависят от конкретной реализации.
Если у вас есть унаследованный С-код и требуется высокая производительность, язык C++ имеет определенные преимущества, особенно при необходимости низкоуровневого доступа к системе. Если же наиболее важными факторами являются переносимость, безопасность и скорость разработки, лучше выбрать Java.
Дружественные классы
Ключевое слово friend, указанное с функциями или классами, дает дружественной функции или классу доступ к закрытым членам класса, в котором находится объявление. Некоторые программисты считают, что данный механизм противоречит принципам объектно-ориентированного программирования, так как позволяет классу работать с закрытыми членами другого класса. Это может привести к неожиданным ошибкам, когда изменение внутренней реализации класса становится причиной проблем с имеющим к нему доступ дружественным классом.
Однако в некоторых случаях выгоды от дружественных классов перевешивают их недостатки. К примеру, представьте реализацию класса такого динамического массива, в котором отдельный класс способен по очереди обращаться к элементам этого массива. Такой класс-итератор может корректно функционировать только при наличии доступа к закрытым членам класса динамического массива. Значит, имеет смысл объявить итератор другом класса массива. Поскольку работа этих двух классов неразрывно связана друг с другом, не стоит бессмысленно настаивать на их разделении.
Читайте также: Новости России и мира.