2012-05-16 29 views
8

Có thể quá tải các toán tử (như toán tử so sánh) trong C?Có thể vận hành quá tải trong C?

Nếu có, bạn làm cách nào? Tôi đã tìm kiếm nhanh, nhưng tất cả những gì tôi tìm được là cho C++, và những gì tôi muốn là cho C.

Bất cứ ai có ý tưởng nào?

Chỉnh sửa1: Ý tưởng là: Tôi có cấu trúc và tôi cần thực hiện so sánh (dựa trên thành viên của cấu trúc). Và vì điều này tôi muốn kết hợp các toán tử so với "kiểu dữ liệu" mới của tôi.

Chỉnh sửa2: Tôi hoàn toàn nhận thức được rằng tôi có thể thực hiện mà không cần sử dụng toán tử quá tải, nhưng đã tự hỏi liệu bạn có thể thực hiện điều này VỚI OVERLOAD không.

Trả lời: Khái niệm quá tải có liên quan đến lập trình hướng đối tượng. Vì C không hướng đối tượng và do đó không thể chứa khái niệm quá tải. (:..

+1

Tôi muốn thực hiện điều này trong C: struct A; _Bool A_compare (const struct * A, const struct * A); – xis

+0

Tôi biết. Tôi muốn sử dụng toán tử nếu có thể. – Richard

+0

Nếu bạn muốn quá tải toán tử, bạn sẽ cần chuyển sang C++ –

Trả lời

18

Không, nó không phải là khả năng C không hỗ trợ điều hành quá tải

+0

Xem xét theo cách này, nhà điều hành không phải là một loại chức năng cụ thể? – Richard

+2

bạn có ý nghĩa gì bởi các hàm quá tải trong C? C không hỗ trợ chức năng quá tải. – xis

+1

@ xis19 Không, không, sai lầm của tôi. Richard: Trong C++, các toán tử rất giống các hàm, và định nghĩa các toán tử quá tải được thực hiện giống như cách bạn định nghĩa các hàm. – meagar

5

Nếu do tình trạng quá tải, bạn có nghĩa là người sử dụng định nghĩa quá tải toán tử, thì câu trả lời là không Tuy nhiên, một số các nhà khai thác được xác định trước như. *, + vv quá tải (nếu bạn nghĩ về nó) với nhiều loại số học. các * là đặc biệt vì nó cũng có một tình trạng quá tải cho con trỏ de-tham khảo.

+0

Nhiều * và dereference * khác nhau. Tôi nghĩ họ không quá tải. – xis

+3

'*' không thực sự là đặc biệt. Có hai toán tử riêng biệt, một nhị phân, một số khác, có cùng tên. Điều tương tự cũng xảy ra với, ví dụ, '&'. Trong cả hai trường hợp, các toán tử đơn và nhị phân không liên quan. –

+0

Có chúng khác nhau. Đó là lý do tại sao tôi nói '*' là đặc biệt và không bị quá tải. – dirkgently

3

C không hỗ trợ quá tải của các nhà khai thác hoặc chức năng. Không có cách nào bạn có thể xác định lại <, <=, >, >=, == hoặc != để so sánh trực tiếp các loại cấu trúc.

Các vấn đề liên quan