Является ли C ++ объектно-ориентированным языком?

Я всегда слышал, что C ++ не является объектно-ориентированным, а скорее "C with Classes". Поэтому, когда я упомянул интервьюеру, что C ++ на самом деле не является объектно-ориентированным, он спросил меня, почему я не считаю его языком OO. Я не делал C ++ со времен университета, и у меня не было большого ответа. Является ли объект C ++ ориентированным или нет? и почему?

30
задан TobiMcNamobi 5 October 2015 в 12:22
поделиться

16 ответов

C ++ обычно считается "мультипарадигмальным" языком. То есть вы можете использовать его для объектно-ориентированного, процедурного и даже функционального программирования.

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

Конечно, C ++ не является объектно-ориентированным языком в той же степени, что и Smalltalk, Ruby, Self и т. Д., Но это определенно эффективный объектно-ориентированный язык по большинству стандартов.

74
ответ дан 27 November 2019 в 22:53
поделиться

Термин «объектно-ориентированный» слишком туманный, чтобы дать однозначный ответ «да» или «нет». Я думаю, вы обнаружите, что большинство считает, что C ++ - это объектно-ориентированный язык, или, по крайней мере, вы можете писать объектно-ориентированным способом на C ++. Если вы хотите получить более определенный ответ, вам придется задать более определенный вопрос, например:

Q: Есть ли в C ++ типы данных «объект» (т.е. поля данных + связанные функции-члены)?
Ответ: Да.

В: Есть ли в C ++ не объектные типы данных?
Ответ: Да.

В: Есть ли в C ++ функции, не являющиеся членами?
Ответ: Да.

3
ответ дан 27 November 2019 в 22:53
поделиться

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

1
ответ дан 27 November 2019 в 22:53
поделиться

Как говорили другие, C ++ не является языком PURE OO. Опять же, единственный язык Pure OO, который я знаю, - это smalltalk. Единственный чистый функциональный язык, который я знаю, - это лямбда-исчисление. Я не знаю НИКАКИХ чисто структурированных языков (все они имеют операторы goto и / или множественные операторы возврата)

Большинство людей не любят писать на чистых языках программирования. Это сводит на нет их стиль.

4
ответ дан 27 November 2019 в 22:53
поделиться

C ++ объектно-ориентирован, потому что классы обеспечивают абстракцию, наследование и все такое. Его не всегда считают объектно-ориентированным, потому что код не требует, чтобы был объектно-ориентированным. Это все равно что сказать, что схема не работает, потому что она установлена ​​!.

5
ответ дан 27 November 2019 в 22:53
поделиться

Идея в том, что C ++ не просто объектно-ориентированный язык.

6
ответ дан 27 November 2019 в 22:53
поделиться

C++ - это ОО язык.
Но это не единственный стиль кодирования, в котором может использоваться C++. n Как таковой C++ технически является мультипарадигмальным языком, в котором ОО - лишь одна из парадигм.

Термин "Си с классами" имеет несколько значений.

  • Он может относиться к тому факту, что C++ является ОО (поскольку классы дают ему возможности ОО).
  • Он может относиться к оригинальной версии "cfront"
    • Которая была по сути Си с расширением классов и мало чем еще.
  • Он может относиться (уничижительно) к стилю программирования, который не использует всю мощь C++, а использует только небольшое подмножество языка.
6
ответ дан 27 November 2019 в 22:53
поделиться

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

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

Можно написать C ++ как «лучший C» и использовать чисто процедурный стиль. Объекты не обязательны. Может ты так думаешь.

8
ответ дан 27 November 2019 в 22:53
поделиться

Мех. У каждого свое определение ООП. Алан Кей, который изобрел термин ООП, сказал: http://www.noulakaz.net/weblog/2007/02/12/true-meaning-of-oop/

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

Согласно этому определению даже Java, C #, Python и т. Д. Не являются объектно-ориентированными языками.

ИМХО, эти дискуссии бессмысленны.

12
ответ дан 27 November 2019 в 22:53
поделиться

Ба! Люди, которые говорят, что C ++ не является объектно-ориентированным, - это те же люди, которые сказали бы, что спам - это не еда: -)

Толпа «религиозных психов» OO скажет, что вы можете иметь настоящий объектно-ориентированный язык только в том случае, если абсолютно все является объектом. Это нормально, они могут сидеть в своих башнях из слоновой кости и верить во что хотят. У некоторых из нас есть настоящая работа.

При условии, что вы используете объектное мышление, C ++ (и даже C, если вы используете всевозможные трюки с указателями функций внутри структур) более чем достаточно, чтобы считаться объектно-ориентированными.

16
ответ дан 27 November 2019 в 22:53
поделиться

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

Просто игнорируйте их.

19
ответ дан 27 November 2019 в 22:53
поделиться

C ++ - это язык программирования с несколькими парадигмами , поддерживающий

стили программирования. Вы можете свободно выбирать (и смешивать) в соответствии с потребностями вашего проекта.

26
ответ дан 27 November 2019 в 22:53
поделиться

Если я, как интервьюер, задаю вам этот вопрос, меня, вероятно, не волнует ответ да / нет - я действительно хочу знать, что вы понимаете в программировании, C ++ или Другие языки. Вы просто отбрасываете термины, о которых не думаете или не понимаете, или вы действительно тщательно обдумываете то, что делаете и говорите? Поэтому в этой ситуации хорошим ответом будет

: «Я определяю объектно-ориентированное кодирование как a, b, c и d. Я определяю объектно-ориентированный язык как язык, который поддерживает это определение, т. Е. Позволяет мне (легко / единообразно / строго / другое прилагательное) разработать код, который удовлетворяет этим требованиям. C ++ предоставляет a, b, c и частично d. Поэтому я (не) считаю C ++ объектно ориентированным по этим причинам »

По определению, C ++ достаточно объектно-ориентирован и поддерживает другие подходы.

2
ответ дан 27 November 2019 в 22:53
поделиться

C++ - объектно-ориентированный. c++ - это c с классами, по-другому можно сказать, что c++ - это c с добавленным oop (и, конечно, поверх c есть что-то еще).

2
ответ дан 27 November 2019 в 22:53
поделиться

Объектно-ориентированное программирование (ООП) стало предпочтительным подходом к программированию в индустрии программного обеспечения, так как оно предлагает мощный способ справиться с комплексностью задач реального мира. Среди языков ООП, доступных сегодня, c ++ является наиболее широко используемым языком.

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

  1. Объектно-ориентированные языки программирования.

  2. Объектно-ориентированные языки программирования.

    1. Объектно-ориентированные языки программирования . если он поддерживает

        A. ФОРМИРОВАНИЕ ДАННЫХ
      Б. МЕХАНИЗМЫ СКРЫТИЯ ДАННЫХ И ДОСТУПА
      В. АВТОМАТИЧЕСКАЯ ИНИЦИАЛИЗАЦИЯ И ОЧИСТКА ОБЪЕКТОВ
      D. ПЕРЕГРУЗКА ОПЕРАТОРА
      

      2. Объектно-ориентированные языки программирования.

      Он поддерживает все функции объектно-ориентированного программирования вместе с двумя дополнительными функциями

        E. НАСЛЕДОВАНИЕ
      F. ДИНАМИЧЕСКАЯ СВЯЗЬ
      

следовательно, объектно-ориентированные языки программирования означают

**Object-based features+ inheritance+ dynamic binding.**

Примеры: C ++, SMALLTALK, OBJECT PASCAL, JAVA

Итак, C ++ является ОБЪЕКТИВНО-ОРИЕНТИРОВАННЫМ ЯЗЫКОМ ПРОГРАММИРОВАНИЯ >

Если у вас все еще должны быть некоторые сомнения в концепциях объектно-ориентированного программирования, обратитесь к книге Э. Балагурусвами.

-3
ответ дан 27 November 2019 в 22:53
поделиться

Он действительно объектно-ориентированный, но не строго.

Скажем, например, мы можем иметь только

int main()
{
 return 1;
}

, что ничто в названии объектно-ориентированного, а с другой стороны мы можем иметь классы, наследование, полиморфизм и т. Д., , что соответствует объектно-ориентированному режиму.

Мы должны раскрыть силу языка.

Интервьюеру, задавшему вам вопрос, покажите класс a из C ++ и спросите его, структурирован ли он или процедурен .. Он покажет вам ту же функцию main (), я думаю :)

Так что я полагаю, что это ложь, основанная на том, что вы реализовали. Но у него есть функции, которые позволяют рассматривать его как ООП.

1
ответ дан 27 November 2019 в 22:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: