Що таке мета C ++? [зачинено]


165

Що таке об'єктив C ++ і чи можу я використовувати цю мову в Xcode?



Близька причина "важко сказати, про що запитують" була старішою причиною закриття питання. У наші дні причина була б "надто широкою", оскільки ОП - це справді два різні питання. По-перше, роз'яснення Objective C ++ потребує декількох сторінок, а по-друге, кодування для iOS спеціально робиться за допомогою Objective C і XCode - це IDE за замовчуванням для розробки iOS, тому хоча вони пов'язані, це занадто велике питання. Цей тип питань слід перемістити на сайт Документація.
Келлі С. Французька

1
@ DaveVoyles-MSFT: Мені важко сприймати когось серйозно, хто думає, що заборонити питання і механізоване, індустріалізоване, організоване, систематичне масове вбивство понад 6 мільйонів людей - те саме.
Йорг W Міттаг

3
@ JörgWMittag Вибачте, але Ви відповідь закрили, оскільки модератори Stack Overflow не є справжнім питанням.
Дейв Войлес

1
@ DaveVoyles-MSFT: Причину закриття голосування "не справжнє питання" було видалено років тому.
Йорг W Міттаг

Відповіді:


158

Objective-C ++ - це просто вихідний код, який поєднує класи Objective-C та C ++ (два повністю не пов'язані між собою об'єкти). Ваш код C ++ буде працювати так само, як і раніше, і отриманий виконуваний файл буде пов'язаний з програмою Objective-C, тому ваші класи Objective-C також працюватимуть. Ви точно можете використовувати його в Xcode - називайте свої файли з .mmрозширенням.

Також ви можете прочитати документацію Apple (на жаль видалену, але заархівовану) документацію на Objective-C ++ .


2
Розділ обмеження в цьому посиланні говорить про це і варто навести цитування Objective-C ++ не додає C ++ функції до класів Objective-C, а також не додає функцій Objective-C до класів C ++. Наприклад, ви не можете використовувати синтаксис Objective-C для виклику об'єкта C ++, ви не можете додати конструктори або деструктори до об'єкта Objective-C, і ви не можете використовувати ключові слова це і самостійно взаємозамінні. Ієрархії класів є окремими; клас C ++ не може успадкувати від класу Objective-C, а клас Objective-C не може успадкувати від класу C ++. Крім того, не підтримується обробка виключень з декількома мовами
asgs

33

Objective-C ++ - це Objective-C (можливо, з Cocoa Framework) з можливістю зв’язуватися з кодом C ++ (ймовірні класи).

Так, ви можете використовувати цю мову в Xcode для розробки для Mac OS X, iPhone / iPodTouch, iPad. Це працює дуже добре.

Вам не потрібно робити нічого дивного у своєму проекті, щоб використовувати Objective-C ++. Просто назвіть свої файли Objective-C з розширенням .mm (замість .m ), і ви готові йти.

Це моя улюблена архітектура: розробити бібліотеку базових класів моєї гри / програми на C ++, щоб я міг її повторно використовувати в інших платформах (Windows, Linux) і використовувати какао лише для специфічних інтерфейсів iPhone / iPad UI .


10
Йдеться не про зв'язок із C ++ - ви мали на увазі змішування ?
Георг Фріцше

6

Якщо ви хочете використовувати Objective-c ++, але не хочете називати ваші файли, .mmогляньте мій відповідь на подібне запитання .

Не змінюючи .m на .mm чи щось подібне, якщо ви натискаєте на свій проект, клацніть на tagets-> налаштування збірки перейдіть вниз до "LLVM GCC 4.2 - мови" (новий xcode каже "Apple LLVM компілятор 4.2" ) ви з'явиться джерела компіляції. Як змінити це значення на Objective-C ++ ;


4
в той час як ви можете це зробити, це не настільки портативно і може заплутати того, хто намагається підтримувати ваш код, де .s - заголовок, а .r - файли реалізації.
Граді Грайдер

звідки ви тягнете .s і .r з? Ви можете використовувати стандартний .m для файлу методу та .h для заголовка так само, як якщо б ви використовували звичайний Objective-c.
Джон Різельвато

Я просто кажу, що .m щось значить, і, щоб це означало щось інше, є нестандартним.
Гравець Граді

У Objective-c для використання вектора std (a c ++ std) мені знадобиться увімкнено Objective-c ++. Мені не було б сенсу створювати інше розширення типу файлу просто для використання векторів всередині мого коду target-c.
Джон Різельвато

13
абсолютно б це було, воно буде використовувати 'cout' або все, що не входить до групи C.
Grady Player
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.