Objective C ++ nedir? [kapalı]


165

Objective C ++ nedir ve bu dili Xcode'da kullanabilir miyim?



'Neyin sorulduğunu söylemek zor' yakın nedeni, bir soruyu kapatmak için daha eski bir nedendi. OP gerçekten iki farklı soru olduğu için bugünlerde neden 'çok geniş' olurdu. Birincisi, Objective C ++ 'nın adreslenmesi birkaç sayfa alacaktır ve ikincisi, iOS için kodlama özellikle Objective C kullanılarak yapılır ve XCode iOS gelişimi için varsayılan IDE'dir, bu yüzden ikisi ilişkili olsa bile çok büyük bir sorudur. Bu tür sorular Dokümantasyon sitesine taşınmalıdır.
Kelly

1
@ DaveVoyles-MSFT: Bir soruyu küçümseyen ve 6 milyondan fazla insanın mekanize, sanayileşmiş, organize, sistematik toplu katliamının aynı şey olduğunu düşünen birini ciddiye almakta zorlanıyorum.
Jörg W Mittag

3
@ JörgWMittag Üzgünüm, ancak yanıtınız Stack Overflow moderatörleri tarafından gerçek bir soru olarak kapatılmadı.
Dave Voyles

1
@ DaveVoyles-MSFT: "Gerçek bir soru değil" yakın oylama nedeni yıllar önce kaldırıldı.
Jörg W Mittag

Yanıtlar:


158

Objective-C ++, Objective-C sınıflarını ve C ++ sınıflarını (tamamen ilgisiz iki varlık) karıştıran kaynak kodudur. C ++ kodunuz daha önce olduğu gibi çalışacak ve sonuçtaki yürütülebilir dosya Objective-C çalışma zamanı ile bağlantılı olacaktır, böylece Objective-C sınıflarınız da çalışacaktır. Kesinlikle Xcode içinde kullanabilirsiniz - dosyalarınızı .mmuzantısıyla adlandırın.

Ayrıca, Objective-C ++ ile ilgili Apple belgelerini (ne yazık ki silinir, ancak arşivlenir) okumak isteyebilirsiniz .


2
bu bağlantıdaki sınırlama bölümü bunu söyler ve alıntıya değin Objective-C ++, Objective-C sınıflarına C ++ özellikleri veya C ++ sınıflarına Objective-C özellikleri eklemez. Örneğin, bir C ++ nesnesini çağırmak için Objective-C sözdizimini kullanamazsınız, bir Objective-C nesnesine yapıcılar veya yıkıcılar ekleyemezsiniz ve bu anahtar kelimeleri kendi kendine ve birbirinin yerine kullanamazsınız. Sınıf hiyerarşileri ayrıdır; bir C ++ sınıfı bir Objective-C sınıfından miras alınamaz ve bir Objective-C sınıfı bir C ++ sınıfından miras alınamaz. Ayrıca, çok dilli istisna işleme desteklenmez
8'de

33

Objective-C ++, C ++ koduyla (olası sınıflar) bağlantı kurma yeteneğine sahip Objective-C'dir (muhtemelen Cocoa Framework ile).

Evet, bu kodu Xcode'da Mac OS X, iPhone / iPodTouch, iPad için geliştirmek için kullanabilirsiniz. Çok iyi çalışıyor.

Objective-C ++ kullanmak için projenizde garip bir şey yapmanız gerekmez. Objective-C dosyalarınızı .mm ( .m yerine ) uzantısıyla adlandırmanız yeterlidir .

Bu benim en sevdiğim mimari: C ++ 'da oyunumun / uygulamamın temel sınıf kütüphanesini geliştiriyorum, böylece diğer platformlarda (Windows, Linux) yeniden kullanabilir ve Cocoa'yı sadece iPhone / iPad UI'ya özgü şeyler için kullanabilirim.


10
C ++ ile bağlantı kurmakla ilgili değil - karıştırma mı demek istediniz ?
Georg Fritzsche

6

Objective-c ++ kullanmak istiyorsanız, ancak dosyalarınızı adlandırmak istemiyorsanız, benzer bir soruya.mm verdiğim yanıt .

Herhangi bir .m'yi .mm'ye veya bunun gibi bir şeye değiştirmeden, projenizi tıklarsanız, tagets-> build ayarları "LLVM GCC 4.2 - Diller" e kadar iner (yeni xcode "Apple LLVM derleyici 4.2" der ) göreceksiniz Derleme Kaynakları olarak bu değeri değiştirmek ++ Objective-C ;


4
bunu yapabilirsiniz, ancak bu kadar taşınabilir değildir ve .s bir başlık ve .r uygulama dosyaları olduğu kodunuzu korumaya çalışan biri için kafa karıştırıcı olabilir.
Grady Oyuncu

.s ve .r'yi nereden çekiyorsun? Yöntem dosyası için standart .m ve üstbilgi için .h gibi düz Objective-c kullandığınız gibi kullanabilirsiniz.
John Riselvato

Sadece .m'nin bir şey anlamına geldiğini ve başka bir şey anlamına gelmesinin standart olmadığını söylüyorum.
Grady Oyuncu

Amaç-c std vektör (bir c ++ std) kullanmak için açık Objective-c ++ gerekir. Benim objektif-c kodumda vektörleri kullanmak için farklı bir dosya tipi uzantısı oluşturmak benim için anlamlı olmaz.
John Riselvato

13
kesinlikle olurdu, 'cout' ya da C'nin bir parçası olmayan bir şey kullanırdı
Grady Player
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.