2012-04-27 34 views
7
class MyClass; 

int main() 
{ 
    float a = 5; 
    MyClass c1; 
    MyClass c2 = a*c1; 
    MyClass c3 = c1*a; 
} 

Làm thế nào tôi có thể quá tải toán tử nhân sao cho cả * c1 và c1 * một tác phẩm?đơn giản C++: Làm thế nào để quá tải toán tử nhân để float * myClass và myClass * float hoạt động

+0

MyClass' có các nhà xây dựng nào? Nó có thể được chuyển đổi hoàn toàn từ 'float 'không? –

+1

@David Hãy nói rằng nó không thể – user52343

Trả lời

16

Giống như vậy:

MyClass operator* (float x, const MyClass& y) 
{ 
    //... 
} 

MyClass operator* (const MyClass& y, float x) 
{ 
    //... 
} 

Điều thứ hai cũng có thể là một hàm thành viên:

class MyClass 
{ 
    //... 
    MyClass operator* (float x); 
}; 

2 tùy chọn đầu tiên làm việc như khai báo bên ngoài phạm vi lớp học.

+0

Không phải là một toán tử quá tải được gọi ngầm sử dụng đối số đầu tiên? Sau đó, nếu đối số đầu tiên đó là một kiểu dữ liệu cơ bản (nổi ở đây), nó có hoạt động không? – vaisakh

+1

@vaisakh bạn có thể quá tải bất kỳ toán tử nhị phân nào nếu bạn cung cấp ít nhất một loại do người dùng xác định. Trong trường hợp này, 'MyClass' được người dùng xác định. Vì vậy, bạn có thể định nghĩa 'toán tử + (int, const MyClass &)' nhưng bạn không thể định nghĩa lại 'toán tử + (int, int)'. –

+0

OK. Tôi chưa bao giờ thử nó theo cách đó. Cảm ơn :) – vaisakh

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