Co to jest Objective C ++? [Zamknięte]

165

Co to jest Objective C ++ i czy mogę używać tego języka w Xcode?

Saurabh
źródło
Bliski powód „trudno powiedzieć, o co zostało zadane” był starszym powodem zamknięcia pytania. W dzisiejszych czasach powód byłby „zbyt szeroki”, ponieważ PO to tak naprawdę dwa różne pytania. Po pierwsze, wyjaśnienie Objective C ++ zajmie kilka stron, a po drugie, kodowanie dla iOS jest specjalnie wykonywane przy użyciu Objective C, a XCode jest domyślnym IDE dla programowania iOS, więc nawet jeśli te dwa są powiązane, samo pytanie jest zbyt duże. Tego typu pytania należy przenieść do witryny Dokumentacja.
Kelly S. French
1
@ DaveVoyles-MSFT: Trudno mi traktować poważnie kogoś, kto myśli, że odrzucenie pytania i zmechanizowane, uprzemysłowione, zorganizowane, systematyczne masowe mordy ponad 6 milionów ludzi to to samo.
Jörg W Mittag,
3
@ JörgWMittag Przykro mi, ale twoja odpowiedź została zamknięta jako nierealne pytanie przez moderatorów Stack Overflow.
Dave Voyles
1
@ DaveVoyles-MSFT: Powód bliskiego głosowania „to nie jest prawdziwe pytanie” został usunięty lata temu.
Jörg W Mittag

Odpowiedzi:

158

Objective-C ++ to po prostu kod źródłowy, który łączy klasy Objective-C i C ++ (dwie całkowicie niepowiązane jednostki). Twój kod C ++ będzie działał, tak jak poprzednio, a wynikowy plik wykonywalny zostanie połączony ze środowiskiem uruchomieniowym Objective-C, więc Twoje klasy Objective-C również będą działać. Zdecydowanie możesz go użyć w Xcode - nazwij swoje pliki z .mmrozszerzeniem.

Możesz także przeczytać dokumentację Apple (niestety usuniętą, ale zarchiwizowaną) na temat Objective-C ++ .

Doches
źródło
2
sekcja z ograniczeniami w tym linku mówi o tym i warto ją zacytować. Objective-C ++ nie dodaje funkcji C ++ do klas Objective-C, ani nie dodaje funkcji Objective-C do klas C ++. Na przykład nie można używać składni Objective-C do wywoływania obiektu C ++, nie można dodawać konstruktorów ani destruktorów do obiektu Objective-C i nie można używać zamiennie słów kluczowych this i self. Hierarchie klas są oddzielne; Klasa C ++ nie może dziedziczyć z klasy Objective-C, a klasa Objective-C nie może dziedziczyć z klasy C ++. Ponadto obsługa wyjątków w wielu językach nie jest obsługiwana
asgs
33

Objective-C ++ to Objective-C (prawdopodobnie z Cocoa Framework) z możliwością łączenia się z kodem C ++ (prawdopodobne klasy).

Tak, możesz używać tego języka w Xcode do programowania na Mac OS X, iPhone / iPodTouch, iPad. Pracuje bardzo dobrze.

Nie musisz robić nic dziwnego w swoim projekcie, żeby używać Objective-C ++. Po prostu nazwij swoje pliki Objective-C z rozszerzeniem .mm (zamiast .m ) i gotowe.

To moja ulubiona architektura: opracuj bibliotekę klas bazowych mojej gry / aplikacji w C ++, abym mógł jej ponownie używać na innych platformach (Windows, Linux) i używać Cocoa tylko do obsługi interfejsu użytkownika iPhone'a / iPada .

Pablo Santa Cruz
źródło
10
Nie chodzi o linkowanie z C ++ - czy chodziło Ci o mieszanie ?
Georg Fritzsche,
6

Jeśli chcesz używać Objective-c ++, ale nie chcesz nazywać swoich plików, sprawdź .mmmoją odpowiedź na podobne pytanie .

Nie zmieniając żadnego pliku .m na .mm lub czegoś podobnego, jeśli klikniesz projekt, kliknij tagets-> ustawienia kompilacji, aby przejść do „LLVM GCC 4.2 - Języki” (nowy xcode mówi „Kompilator Apple LLVM 4.2” ) zobaczy Compile Sources As zmienić tę wartość na Objective-C ++ ;

John Riselvato
źródło
4
chociaż możesz to zrobić, nie jest tak przenośny i może być mylący dla kogoś, kto próbuje utrzymać Twój kod, w którym .s to nagłówek, a .r to pliki implementacji.
Grady Player
skąd ciągniesz .s i .r? Możesz użyć standardowego .m dla pliku metody i .h dla nagłówka, tak jakbyś użył zwykłego Objective-c.
John Riselvato
Po prostu mówię, że .m coś znaczy, a nadanie mu innego znaczenia jest niestandardowe.
Grady Player
W Objective-c, aby użyć wektora std (a c ++ std), potrzebowałbym włączonego Objective-c ++. Nie miałbym sensu tworzyć innego rozszerzenia typu pliku tylko po to, aby używać wektorów wewnątrz mojego kodu obiektywnego c.
John Riselvato
13
absolutnie tak, użyłby „cout” lub czegokolwiek, co nie jest częścią C.
Grady Player