Tôi đang học C++ và tôi đã tạo hai ứng dụng chào đơn giản trên thế giới. Trong cả hai, tôi sử dụng quá tải của nhà điều hành, nhưng đây là vấn đề. Trên cái đầu tiên, tôi có thể cung cấp hai đối số cho toán tử quá tải, và nó ổn.Số lượng đối số trong quá tải toán tử trong C++
Tiêu đề:
enum Element {a,b,c,d,e};
Element operator + (Element x, Element y);
//more overloads for -, *,/here
Nguồn:
Element operator + (Element x, Element y) {
return ArrayOfElements[x][y];
}
Nhưng trong ứng dụng thứ hai của tôi (đơn giản số phức tạp tính) - Phương pháp này không làm việc. Sau khi googling và tìm ra lý do tại sao, tôi kết thúc với mã này:
Tiêu đề:
struct Complex {
double Re;
double Im;
Complex (double R, double I) : Re(R), Im(I) { }
Complex operator + (Complex &Number);
//more overloads
};
Nguồn:
Complex Complex::operator + (Complex &Number)
{
Complex tmp = Complex(0, 0);
tmp.Re = Re + Number.Re;
tmp.Im = Im + Number.Im;
return tmp;
}
Đó là làm việc bây giờ, nhưng tôi muốn biết , tại sao trong đoạn mã đầu tiên tôi được phép đặt hai đối số trong quá trình nạp chồng operator
, nhưng với lần thứ hai tôi đã bị lỗi sau?
complex.cpp:5:51: error: 'Complex Complex::operator+(Complex, Complex)' must take either zero or one argument
Cũng giống như bất cứ khi nào tôi sử dụng lớp học hay không. Tôi đã tìm kiếm qua nhiều tài liệu và cách thứ hai dường như chính xác hơn. Có lẽ đó là vì các loại đối số khác nhau?
Cả hai nguồn được biên dịch với thông số -Wall -pedantic
sử dụng g++
, cả hai đều đang sử dụng cùng một thư viện.
Các hàm thành viên có tiềm ẩn 'this' luận –