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


165

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



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 ++ .


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 .


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 ++ ;


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.