Apa itu Objective C ++? [Tutup]

164

Apa itu Objective C ++ dan bisakah saya menggunakan bahasa ini dalam Xcode?

Saurabh
sumber
Alasan dekat 'sulit untuk mengatakan apa yang ditanyakan' adalah alasan lama untuk menutup pertanyaan. Saat ini alasannya akan terlalu luas karena OP sebenarnya adalah dua pertanyaan yang berbeda. Pertama, menjelaskan Objective C ++ akan membutuhkan beberapa halaman untuk diatasi, dan kedua, pengkodean untuk iOS secara khusus dilakukan dengan menggunakan Objective C dan XCode adalah IDE default untuk pengembangan iOS sehingga meskipun keduanya terkait, ini adalah pertanyaan yang terlalu besar. Jenis pertanyaan ini harus dipindahkan ke situs Dokumentasi.
Kelly S. Prancis
1
@ DaveVoyles-MSFT: Saya mengalami kesulitan untuk menganggap serius seseorang yang berpikir bahwa merendahkan sebuah pertanyaan dan pembunuhan masal yang sistematis, industri, terorganisir, sistematis terhadap lebih dari 6 juta orang adalah hal yang sama.
Jörg W Mittag
3
@ JörgWMittag Maaf, tetapi tanggapan Anda telah ditutup karena bukan pertanyaan sesungguhnya oleh moderator Stack Overflow.
Dave Voyles
1
@ DaveVoyles-MSFT: Alasan memilih "bukan pertanyaan sebenarnya" telah dihapus bertahun-tahun yang lalu.
Jörg W Mittag

Jawaban:

157

Objective-C ++ hanyalah kode sumber yang menggabungkan kelas Objective-C dan kelas C ++ (dua entitas yang sama sekali tidak terkait). Kode C ++ Anda akan berfungsi, seperti sebelumnya, dan executable yang dihasilkan akan ditautkan dengan runtime Objective-C, sehingga kelas Objective-C Anda juga akan berfungsi. Anda pasti dapat menggunakannya dalam Xcode - beri nama file Anda dengan .mmekstensi.

Juga, Anda mungkin ingin membaca dokumentasi Apple (dihapus dengan sedih, tetapi diarsipkan) pada Objective-C ++ .

Doches
sumber
2
bagian pembatasan dalam tautan mengatakan ini dan layak mengutip Objective-C ++ tidak menambahkan fitur C ++ ke kelas Objective-C, juga tidak menambahkan fitur Objective-C ke kelas C ++. Misalnya, Anda tidak bisa menggunakan sintaks Objective-C untuk memanggil objek C ++, Anda tidak bisa menambahkan konstruktor atau destruktor ke objek Objective-C, dan Anda tidak bisa menggunakan kata kunci ini dan diri secara bergantian. Hirarki kelas terpisah; kelas C ++ tidak bisa mewarisi dari kelas Objective-C, dan kelas Objective-C tidak bisa mewarisi dari kelas C ++. Selain itu, penanganan pengecualian multi-bahasa tidak didukung
asgs
33

Objective-C ++ adalah Objective-C (mungkin dengan Cocoa Framework) dengan kemampuan untuk terhubung dengan kode C ++ (kelas yang mungkin).

Ya, Anda dapat menggunakan bahasa ini dalam Xcode untuk dikembangkan untuk Mac OS X, iPhone / iPodTouch, iPad. Ini bekerja dengan sangat baik.

Anda tidak perlu melakukan hal aneh dalam proyek Anda untuk menggunakan Objective-C ++. Cukup beri nama file Objective-C Anda dengan ekstensi .mm (bukan .m ) dan Anda siap melakukannya.

Ini adalah arsitektur favorit saya: kembangkan perpustakaan kelas dasar dari game / aplikasi saya di C ++ sehingga saya dapat menggunakannya kembali di platform lain (Windows, Linux) dan menggunakan Cocoa hanya untuk hal-hal spesifik UI iPhone / iPad .

Pablo Santa Cruz
sumber
10
Ini bukan tentang menghubungkan dengan C ++ - maksud Anda pencampuran ?
Georg Fritzsche
6

Jika Anda ingin menggunakan Objective-c ++ tetapi tidak ingin memberi nama file Anda .mmcheckout jawaban saya untuk pertanyaan serupa .

Tanpa mengubah .m ke .mm atau apapun seperti itu, jika Anda mengklik proyek Anda, klik tagets-> build setting sampai ke "LLVM GCC 4.2 - Languages" (xcode baru mengatakan "Apple LLVM compiler 4.2" ) Anda akan melihat Kompilasi Sumber Sebagai mengubah nilai itu ke Objective-C ++ ;

John Riselvato
sumber
4
sementara Anda dapat melakukan ini, itu tidak portabel dan mungkin membingungkan bagi seseorang yang mencoba untuk mempertahankan kode Anda di mana .s adalah header dan .r adalah file implementasi.
Pemain Grady
di mana Anda menarik .s dan .r dari? Anda dapat menggunakan standar .m untuk file metode dan .h untuk header sama seperti jika Anda menggunakan Objective-c sederhana.
John Riselvato
Saya hanya mengatakan bahwa .m berarti sesuatu, dan untuk membuatnya berarti sesuatu yang lain adalah tidak standar.
Pemain Grady
Dalam Objective-c untuk menggunakan vektor std (a c + + std), saya perlu Objective-c ++ dihidupkan. Tidak masuk akal bagi saya untuk membuat ekstensi jenis file yang berbeda hanya dengan menggunakan vektor di dalam kode tujuan-c saya.
John Riselvato
13
benar-benar akan, itu akan menggunakan 'cout' atau apa pun yang bukan bagian dari C.
Grady Player