Рус Укр
Разница между языками программирования C++ и Java

Разница между языками программирования C++ и Java

  • 20 июня
  • читать 3 мин

Где применяется Java

И Java, и C++ — объектно-ориентированные языки программирования, но на этом их сходства, пожалуй, заканчиваются, а вот отличий между ними достаточно много.

Начнем с основы java. Java — чистый объектно-ориентированный язык программирования; следовательно, в Java все является объектом (однокорневая иерархия, поскольку всё исходит от java.lang.Object).

Рекомендуем курс по теме

Для чего нужен С++

В то время как в C++ не существует подобной корневой иерархии. C++ поддерживает как процедурное, так и объектно-ориентированное программирование; поэтому он называется гибридным. Ниже в таблице приведены основные характеристики этих языков и их отличия.

Рекомендуем курс по теме

Основные отличия языков Java и C++

JavaC++
Java
не поддерживает указатели (pointers), шаблоны (templates), объединения
(unions), перегрузку операторов (operator overloading), структур и т.д.
Изначально было заявлено, что в языке Java нет никаких указателей, но
многим программистам было непонятно, как можно работать без указателей, и
тогда стали говорить, что их ограниченное количество. Java поддерживает
так называемые «ссылки» (“references”). Ссылки имеют во многом схожую с
указателями в С++ функцию, но на указателях в Java невозможно совершать
арифметические действия. У ссылок есть типы, и они типобезопасны
(type-safe). Их нельзя интерпретировать как адрес raw, а небезопасная
конверсия запрещена.
C++
поддерживает структуры, объединения (unions), шаблоны (templates),
перегрузку операторов (operator overloading), указатели (pointers) и
адресную арифметику указателей (pointer aritdmetic).
Java
поддерживает автоматическое управление освобождением динамической
памяти. Она, в отличие от C++, не поддерживает деструкторы.
C++ поддерживает деструкторы. Эта функция автоматически активируется при уничтожении объекта.
Java не поддерживает условную компиляцию и включение.
Условное включение (#ifdef #ifndef type) – одна из основных функций C++.
Java
обладает встроенной поддержкой потоков (tdreads). В Java есть класс
потоков, который наследуется для создания нового потока и
переопределения метода run.
C++ не имеет встроенной поддержки потоков. Для этих целей используются нестандартизированные библиотеки третьих сторон.
Java
не поддерживает параметры по умолчанию. В Java нет оператора разрешения
контекста (::). Определения метода должны происходить внутри класса,
поэтому нет нужды в разрешении конфликта.
C++
поддерживает параметры по умолчанию. C++ имеет оператор разрешения
контекста (::), используемый для определения метода вне класса и для
доступа к глобальной переменной внутри из области действия
идентификатора, где внутренняя переменная также существует с тем же
именем.
В Java нет оператора перехода «goto». Сохраняются ключевые слова «const» and «goto» несмотря на то, что они не используются.
C++ обладает оператором перехода «goto». Однако, использование оператора перехода «goto» не приветствуется.
Java не предоставляет множественное наследование, по крайней мере, не так, как C++.
C++
поддерживает множественное наследование. Для устранения неоднозначности
в случае её возникновения во время множественного наследования
используется ключевое слово «virtual».
Обработка
исключений «exceptions» в Java отличается, поскольку деструкторы
отсутствуют. К тому же в Java команды «try/catch» должны определяться в
том случае, если функция указывает, что может сгенерировать исключения
«exception».
В то время, как в C++ может не включать команды «try/catch» несмотря на то, что эта функция генерирует исключения.
В
Java есть метод перегрузки «metdod overloading», но отсутствует
перегрузка операторов «operator overloading». Класс «Stringclass» не
использует операторы + и += для соединения строк «strings», а строковые
выражения «Stringexpressions» используют автоматическое преобразование
типов, но это особенная встроенная опция (built-in case).
C++ поддерживает как перегрузку метода, так и перегрузку оператора.
Java
имеет встроенную поддержку комментариев к документации (/** ... */);
поэтому исходные файлы Java могут содержать собственную документацию,
которая читается отдельным инструментом, обычно Javadoc, и
переформатироваться в HTML. Это упрощает ведение документации.
C++ не поддерживает комментарии к документации.
Java, по большей мере, интерпретируется, поэтому не зависит от платформы.
C++ генерирует объектный код; тот же код может не запускаться на разных платформах.