Trong Python, chúng ta có cú pháp đơn giản tốt đẹp để lấy một int/float tùy ý đến một sức mạnh. Cụ thể, đối với bạn không Python lập trình viên, chúng ta có thể có các tuyên bố sau:Quá tải ** trong C++
y = 2 ** 3
print y
này sẽ in 8 đến giao diện điều khiển, và có cú pháp tốt đẹp như có một xây dựng trong điều hành "quyền lực". Có thể quá tải "**" như một toán tử đơn trong C++ không? Cụ thể, tôi muốn đạt được một cái gì đó như thế này:
int a = 2;
int b = 3;
cout << (a**b) << endl;
hoặc, nếu điều này là không thể, một cái gì đó như thế này:
MyInt a = new MyInt(2); // Wrapper class around ints to play nicely with **
MyInt b = new MyInt(3);
cout << (a**b) << end; // Assume ostream overridden for MyInt
Đây cũng nên in 8 đến console. Tôi hiểu rằng sẽ dễ dàng hơn khi ghi đè lên toán tử "^" để làm điều tương tự, nhưng tôi chủ yếu quan tâm để xem liệu tôi có thể quá tải "**" hay không. Liệu toán tử "*" (đối với trường hợp lớp MyInt, nếu nó là một hàm thành viên) phải xem xét xem đối số có phải là "*" khác không, vì tôi không biết cách chỉ định "**" là một toán tử đơn lẻ? Thậm chí có thể vượt qua một toán tử làm đối số không?
Quy định bổ sung/tiền thưởng nếu có thể (như thể tôi chưa nói đủ): Không có macro !!!
Nó được gọi là toán tử quá tải, bởi vì bạn khai thác quá tải. ** không phải là toán tử. – DeiDei
Không làm quá tải toán tử^theo ý nghĩa của quyền lực, nó có độ ưu tiên thấp hơn ==, + hoặc - vì vậy nó sẽ gây ra nhiều bất ngờ. –
@ ÖöTiib Điểm tuyệt vời! – mwm314