Về mặt kỹ thuật, quá tải phương thức không thể thực hiện trong Mục tiêu-C. Trong thực tế, bạn thường có thể đạt được kết quả tương tự, cũng trong trường hợp bạn không thể trong C++. Trong Objective-C, các tên phương thức bao gồm dấu hai chấm ở phía trước của mỗi đối số, và dấu hai chấm là một phần của tên phương pháp, có nghĩa là ví dụ của bạn sử dụng các tên phương thức khác nhau. Trong thực tế, điều này trở thành một loại chức năng giả-tên-tham số, và bạn có thể nhận được một quá tải giả phương thức bởi đối số FUNCTION hơn là đối số TYPE. Trong hầu hết các trường hợp, điều này thực sự sẽ hữu ích hơn, nhưng nó không phải là quá tải phương thức theo nghĩa hẹp, bởi vì các tên phương thức khác nhau.
Ví dụ:
-(void)makeSquareWithX1:(float)x1 Y1:(float)y1 X2:(float)x2 Y2:(float)y2;
-(void)makeSquareWithX1:(float)x1 Y1:(float)y1 width:(float)width height:(float)height;
này sẽ làm việc trong Objective-C, nhưng bạn không thể có được chức năng tương tự trong C++, bởi vì số lượng tham số và các loại là, chỉ có chức năng tương tự đối số khác nhau. Trong một số trường hợp, mô hình C++ có thể đạt được nhiều chức năng hữu ích hơn. Điều này được chứng minh bởi lớp NSKeyedArchiver:
-(void)encodeFloat:(float)realv forKey:(NSString *)key
-(void)encodeInt32:(int32_t)intv forKey:(NSString *)key
Ở đây, họ phải đặt các loại đối số một phần tên moethod, điều xấu xí. Nếu tôi có thể chọn giữa quá tải C++ và Objective-C "overloading", tôi vẫn sẽ chọn thứ hai.
tôi đã đọc nhiều lần các lập trình viên nói rằng chức năng quá tải là không thể trong mục tiêu C. – Matrix
tôi phải không? .... – Matrix
Đây không phải là quá tải, phương pháp của bạn có các bộ chọn khác nhau (= tên). Một là 'AddMethod:' và cái kia là 'AddMethod ::' – Sven