Подпишитесь на рассылку
Компьютерной школы Hillel

Вы получите:

  1. Информацию о полезных отраслевых мероприятиях
  2. Интересные статьи IT-сферы
  3. Новости Компьютерной школы Hillel
Спасибо!
Нет, спасибо
На нашу рассылку уже подписалось 2241 человека.

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

Автор: Hillel

11 голосов
1173

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

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

Java C++
Java не поддерживает указатели (pointers), шаблоны (templates), объединения (unions), перегрузку операторов (operator overloading), структур и т.д. Изначально было заявлено, что в языке Java нет никаких указателей, но многим программистам было непонятно, как можно работать без указателей, и тогда стали говорить, что их ограниченное количество. Java поддерживает так называемые «ссылки» (“references”). Ссылки имеют во многом схожую с указателями в С++ функцию, но на указателях в Java невозможно совершать арифметические действия. У ссылок есть типы, и они типобезопасны (type-safe). Их нельзя интерпретировать как адрес raw, а небезопасная конверсия запрещена. C++ поддерживает структуры, объединения (unions), шаблоны (templates), перегрузку операторов (operator overloading), указатели (pointers) и адресную арифметику указателей (pointer arithmetic).
Java поддерживает автоматическое управление освобождением динамической памяти. Она, в отличие от C++, не поддерживает деструкторы. C++ поддерживает деструкторы. Эта функция автоматически активируется при уничтожении объекта.
Java не поддерживает условную компиляцию и включение. Условное включение (#ifdef #ifndef type) – одна из основных функций C++.
Java обладает встроенной поддержкой потоков (threads). В 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 есть метод перегрузки «method overloading», но отсутствует перегрузка операторов «operator overloading». Класс «Stringclass» не использует операторы + и += для соединения строк «strings», а строковые выражения «Stringexpressions» используют автоматическое преобразование типов, но это особенная встроенная опция (built-in case). C++ поддерживает как перегрузку метода, так и перегрузку оператора.
Java имеет встроенную поддержку комментариев к документации (/** ... */); поэтому исходные файлы Java могут содержать собственную документацию, которая читается отдельным инструментом, обычно Javadoc, и переформатироваться в HTML. Это упрощает ведение документации. C++ не поддерживает комментарии к документации.
Java, по большей мере, интерпретируется, поэтому не зависит от платформы. C++ генерирует объектный код; тот же код может не запускаться на разных платформах.

​По материалам codingsec.net

Курс по теме:
Java Elementary
21.11.2017 1173
Hillel
IT School,
Компьютерная школа Hillel
Оцените этот материал
comments powered by HyperComments