Mục tiêu C ++ là gì? [đóng cửa]


164

Objective C ++ là gì và tôi có thể sử dụng ngôn ngữ này trong Xcode không?



Lý do gần gũi 'khó nói những gì đang được hỏi' là một lý do cũ hơn để kết thúc một câu hỏi. Ngày nay, lý do sẽ là 'quá rộng' vì OP thực sự là hai câu hỏi khác nhau. Đầu tiên, việc giải thích Objective C ++ sẽ mất vài trang để giải quyết, và thứ hai, mã hóa cho iOS được thực hiện cụ thể bằng Objective C và XCode là IDE mặc định để phát triển iOS, mặc dù hai câu hỏi có liên quan đến nó. Những loại câu hỏi nên được chuyển đến trang Tài liệu.
Kelly S. Pháp

1
@ DaveVoyles-MSFT: Tôi đang gặp khó khăn khi nghiêm túc với một người nghĩ rằng việc hạ thấp một câu hỏi và vụ giết người hàng loạt được cơ giới hóa, công nghiệp hóa, có tổ chức, có hệ thống của hơn 6 triệu người là điều tương tự.
Jörg W Mittag

3
@ JörgWMittag Tôi xin lỗi, nhưng phản hồi của bạn đã bị đóng vì đây không phải là câu hỏi thực sự của người kiểm duyệt Stack Overflow.
Dave Voyles 4/2/18

1
@ DaveVoyles-MSFT: Lý do bỏ phiếu chặt chẽ "không phải là một câu hỏi thực tế" đã bị xóa cách đây nhiều năm.
Jörg W Mittag

Câu trả lời:


157

Objective-C ++ đơn giản là mã nguồn trộn lẫn các lớp Objective-C và các lớp C ++ (hai thực thể hoàn toàn không liên quan). Mã C ++ của bạn sẽ hoạt động, giống như trước đây và kết quả thực thi sẽ được liên kết với thời gian chạy Objective-C, do đó các lớp Objective-C của bạn cũng sẽ hoạt động. Bạn chắc chắn có thể sử dụng nó trong Xcode - đặt tên cho các tệp của bạn với .mmphần mở rộng.

Ngoài ra, bạn có thể muốn đọc tài liệu của Apple (đáng buồn bị xóa, nhưng được lưu trữ) trên Objective-C ++ .


2
phần giới hạn trong liên kết đó nói lên điều này và đáng để trích dẫn Objective-C ++ không thêm các tính năng C ++ vào các lớp Objective-C, cũng như không thêm các tính năng Objective-C cho các lớp C ++. Ví dụ: bạn không thể sử dụng cú pháp Objective-C để gọi một đối tượng C ++, bạn không thể thêm các hàm tạo hoặc hàm hủy vào một đối tượng Objective-C và bạn không thể sử dụng các từ khóa này và tự thay thế cho nhau. Các hệ thống phân cấp lớp là riêng biệt; một lớp C ++ không thể kế thừa từ một lớp Objective-C và một lớp Objective-C không thể kế thừa từ một lớp C ++. Bên cạnh đó, xử lý ngoại lệ đa ngôn ngữ không được hỗ trợ
asgs

33

Objective-C ++ là Objective-C (có thể với Khung làm việc) với khả năng liên kết với mã C ++ (các lớp có thể xảy ra).

Có, bạn có thể sử dụng ngôn ngữ này trong Xcode để phát triển cho Mac OS X, iPhone / iPodTouch, iPad. Nó hoạt động rất tốt.

Bạn không phải làm bất cứ điều gì kỳ lạ trong dự án của mình để sử dụng Objective-C ++. Chỉ cần đặt tên cho các tệp Objective-C của bạn với phần mở rộng .mm (thay vì .m ) và bạn đã sẵn sàng.

Đó là kiến ​​trúc yêu thích của tôi: phát triển thư viện lớp cơ sở của trò chơi / ứng dụng của tôi trong C ++ để tôi có thể sử dụng lại nó trong các nền tảng khác (Windows, Linux) và sử dụng Cacao chỉ cho các công cụ cụ thể cho giao diện người dùng iPhone / iPad .


10
Nó không liên quan đến C ++ - ý bạn là trộn ?
Georg Fritzsche

6

Nếu bạn muốn sử dụng Objective-c ++ nhưng không muốn đặt tên cho các tệp của mình, hãy .mmkiểm tra câu trả lời của tôi cho một câu hỏi tương tự .

Không thay đổi bất kỳ .m thành .mm hoặc bất cứ điều gì tương tự, nếu bạn nhấp vào dự án của mình, hãy nhấp vào thẻ -> cài đặt bản dựng hoàn toàn xuống "LLVM GCC 4.2 - Ngôn ngữ" (xcode mới cho biết "Trình biên dịch LLVM của Apple 4.2" ) sẽ thấy Nguồn biên dịch Khi thay đổi giá trị đó thành Objective-C ++ ;


4
trong khi bạn có thể làm điều này, nó không phải là di động và có thể gây nhầm lẫn cho ai đó đang cố gắng duy trì mã của bạn trong đó .s là một tiêu đề và .r là các tệp triển khai.
Người chơi Grady

bạn đang kéo .s và .r từ đâu? Bạn có thể sử dụng .m tiêu chuẩn cho tệp phương thức và .h cho tiêu đề giống như khi bạn sử dụng Objective-c đơn giản.
John Riselvato

Tôi chỉ nói rằng .m có nghĩa là một cái gì đó, và để làm cho nó có nghĩa là một cái gì đó khác là không chuẩn.
Người chơi Grady

Trong Objective-c để sử dụng vector std (một c ++ std), tôi sẽ cần bật Objective-c ++. Sẽ không có nghĩa đối với tôi khi tạo một phần mở rộng loại tệp khác chỉ để sử dụng các vectơ bên trong mã mục tiêu-c của tôi.
John Riselvato

13
hoàn toàn có thể, nó sẽ sử dụng 'cout' hoặc bất cứ thứ gì không phải là một phần của C.
Người chơi Grady
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.