Рубрики

Часто задаваемые вопросы об интервью C ++ | Набор 2

Q. Основные различия между Java и C ++

Есть много различий, некоторые из основных отличий:

  • Java имеет автоматическую сборку мусора, тогда как в C ++ есть деструкторы, которые автоматически вызываются при уничтожении объекта.
  • Java не поддерживает указатели, шаблоны, объединения, перегрузки операторов, структуры и т. Д.
  • C ++ не имеет встроенной поддержки потоков, тогда как в Java есть класс Thread, который вы наследуете для создания нового потока.
  • Нет перехода на Java
  • C ++ поддерживает перегрузку методов и операторов, но Java имеет только перегрузку методов.
  • C ++ поддерживает множественное наследование, используя только классы, но Java не поддерживает множественное наследование, используя класс. Нам нужны интерфейсы для реализации множественного наследования в Java.
  • Java интерпретируется и, следовательно, не зависит от платформы, а C ++ — нет. Во время компиляции исходный код Java преобразуется в байтовый код JVM. Интерпретатор выполняет этот байт-код во время выполнения и выдает результат. C ++ запускается и компилируется с использованием компилятора, который преобразует исходный код в язык машинного уровня.

В. Что такое спецификаторы доступа C ++?

Спецификаторы доступа используются для определения того, как члены (функции и переменные) могут быть доступны вне класса.

  • Личное: Члены, объявленные как частные, доступны только в пределах одного класса, и к ним нельзя получить доступ вне класса, в котором они объявлены. Дочерним классам также не разрешен доступ к закрытым членам родителя.
  • Публично: Члены, объявленные публично, доступны из любого места.
  • Защищенный: только класс и его дочерние классы могут получить доступ к защищенным членам.

Знаете ли вы, что происходит, когда более строгий доступ предоставляется к методу производного класса в C ++?

  Q. Основные возможности C ++

Класс: Класс — это план данных и функций или методов. Класс не занимает места.

  • Объект: Объекты являются базовыми объектами времени выполнения в объектно-ориентированной системе, объекты являются экземплярами класса, это определенные пользователем типы данных.
  • Инкапсуляция и абстракция данных. Заключение (объединение) данных и функций в единое целое называется инкапсуляцией. Данные не доступны внешнему миру, и только те функции, которые обертывают в класс, могут получить к ним доступ. Эта изоляция данных от прямого доступа программой называется сокрытием данных или сокрытием информации.
  • Абстракция данных — предоставление только необходимой информации внешнему миру и скрытие деталей реализации. Например, рассмотрим класс Complex с открытыми функциями как getReal () и getImag (). Мы можем реализовать класс как массив размера 2 или как две переменные. Преимущество абстракций в том, что мы можем изменить реализацию в любой момент, пользователи класса Complex не будут затронуты, так как интерфейс нашего метода остается прежним. Если бы наша реализация была публичной, мы бы не смогли ее изменить.
  • Наследование. Наследование — это процесс, посредством которого объекты одного класса приобретают свойства объектов другого класса. Поддерживает концепцию иерархической классификации. Наследование обеспечивает возможность повторного использования. Это означает, что мы можем добавить дополнительные функции в существующий класс, не изменяя его.
  • Полиморфизм. Полиморфизм означает способность принимать более одной формы. Операция может демонстрировать различное поведение в разных случаях. Поведение зависит от типов данных, используемых в операции.
  • Динамическое связывание. При динамическом связывании код, который должен быть выполнен в ответ на вызов функции, определяется во время выполнения. C ++ имеет виртуальные функции для поддержки этого.
  • Передача сообщений: объекты связываются друг с другом, отправляя и получая информацию друг другу. Сообщение для объекта представляет собой запрос на выполнение процедуры и, следовательно, вызовет функцию в принимающем объекте, которая генерирует желаемые результаты. Передача сообщений включает в себя указание имени объекта, имени функции и информации для отправки.

Q. Структура против класса в C ++

  • В C ++ структура такая же, как и в классе, за исключением следующих отличий:
    • Члены класса являются закрытыми по умолчанию, а члены структуры являются открытыми по умолчанию.
    • При извлечении структуры из класса / структуры спецификатор доступа по умолчанию для базового класса / структуры является общедоступным. А при получении класса спецификатор доступа по умолчанию является закрытым.

Q. Malloc () против нового / Удалить против свободного

  Ниже приведены различия между malloc () и оператором new.

  • new — это оператор, а malloc () — это функция.
  • new возвращает точный тип данных, тогда как malloc () возвращает void *.
  • новые конструкторы вызовов (экземпляры классов инициализируются и деинициализируются автоматически), в то время как malloc () этого не делает (классы не будут инициализироваться или деинициализироваться автоматически
  • Синтаксис:
    1. int * n = new int (10); // инициализация с новым ()
    2. str = (char *) malloc (15); // таНос ()

free () используется для ресурсов, выделенных malloc () или calloc () в C

Удалить используется на ресурсах, выделенных новым в C ++

Q. Встроенные функции

C ++ предоставляет встроенные функции для уменьшения накладных расходов на вызовы функций. Встроенная функция — это функция, которая раскрывается в строке при ее вызове. Когда вызывается встроенная функция, весь код встроенной функции вставляется или заменяется в точке вызова встроенной функции. Эта замена выполняется компилятором C ++ во время компиляции. Встроенная функция может повысить эффективность, если она мала.

Синтаксис для определения встроенной функции:

встроенное возвращаемое имя-функции (параметры)

{

// код функции

}

Помните, что встраивание — это только запрос к компилятору, а не команда. Компилятор может игнорировать запрос на встраивание.

  Q. Друг класс и функция в C ++

Друг класс может получить доступ к закрытым и защищенным членам другого класса, в котором он объявлен как друг. Иногда полезно разрешить определенному классу доступ к закрытым членам другого класса. Например, классу LinkedList может быть разрешен доступ к закрытым членам Node.

Функция друга Как и класс друга, функции друга может быть предоставлен специальный грант для доступа к закрытым и защищенным членам. Функция друга может быть:

а) метод другого класса

б) глобальная функция

Важные моменты о функциях и классах друзей:

1) Друзья должны использоваться только для ограниченных целей. слишком много функций или внешних классов объявляются как друзья класса с защищенными или частными данными, это уменьшает ценность инкапсуляции отдельных классов в объектно-ориентированном программировании.

2) Дружба не является взаимной. Если класс A является другом B, то B не становится другом A автоматически.

3) Дружба не наследуется (см. Это для более подробной информации)

4) Понятие друзей отсутствует в Java.

Q. Перегрузка функций VS Перегрузка операторов

Перегрузка функций — это функция в C ++, где две или более функций могут иметь одинаковое имя, но разные типы параметров и разное количество параметров.

Примечание. Перегрузка функций с разными типами возврата не допускается.

Операционная перегрузка позволяет нам заставить операторов работать для пользовательских классов. Например, мы можем перегрузить оператор '+' в классе, подобном String, чтобы мы могли объединить две строки, просто используя +.

Другими примерами классов, где арифметические операторы могут быть перегружены, являются комплексное число, дробное число, большое целое число и т. Д.

Q. Копировать конструктор

Конструктор копирования — это функция-член, которая инициализирует объект, используя другой объект того же класса. Конструктор копирования имеет следующий общий прототип функции: ClassName (const ClassName & old_obj);

Точка (int x1, int y1) {x = x1; у = у1; }

// Копировать конструктор

Point (const Point & p2) {x = p2.x; y = p2.y; }

Когда вызывается конструктор копирования?

В C ++ конструктор копирования может вызываться в следующих случаях:

  1. Когда объект класса возвращается по значению.
  2. Когда объект класса передается (в функцию) по значению в качестве аргумента.
  3. Когда объект построен на основе другого объекта того же класса.
  4. Когда компилятор генерирует временный объект.

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

Да, конструктор копирования может быть закрытым

  В. Что такое наследование?

Различные виды объектов часто имеют определенное количество общего между собой. Тем не менее, каждый также определяет дополнительные функции, которые делают их разными. Объектно-ориентированное программирование позволяет классам наследовать часто используемые состояния и поведение от других классов.

В. Что такое статический член?

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

Интересные факты о статических членских функциях в C ++

  • статические функции-члены не имеют этого указателя.
  • Статическая функция-член не может быть виртуальной
  • Объявления функций-членов с одинаковыми именами и именем-типа-списка параметров не могут быть перегружены, если любое из них является объявлением статической функции-члена.
  • Статическая функция-член не может быть объявлена как const, volatile или const volatile.

Нажмите здесь, чтобы прочитать больше интересных фактов о C ++

Нажмите здесь, чтобы попрактиковаться в «Вопросах».

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Часто задаваемые вопросы об интервью C ++ | Набор 2

0.00 (0%) 0 votes