Mã của bạn sẽ trông như thế:
class Bag {
public:
Bag();
Bag(Bag const& other); // copy ctor, declared implicitly if you don't declare it
~Bag();
Bag operator+(Bag const& other) const;
private:
int x;
int y;
};
Bag Bag::operator+(Bag const& other) const {
Bag result (*this);
result.x += other.x;
result.y += other.y;
return result;
}
Các tiềm ẩn "đối tượng hiện tại" cho các chức năng thành viên được trỏ đến bởi một giá trị đặc biệt có tên này.Sau đó, *this
nhận đối tượng đó (theo dereferencing này) và được sử dụng để xây dựng (thông qua trình tạo bản sao) một Túi có tên kết quả.
tôi nghi ngờ mã này được lấy từ một bài tập về nhà, vì vậy bạn có thể không có thể sử dụng mô hình one true addition operator, nhưng người ta thường và bạn cần phải nhận thức nó:
struct Bag {
//...
Bag& operator+=(Bag const& other) {
x += other.x;
y += other.y;
return *this; // return a reference to the "current object"
// as almost all operator=, operator+=, etc. should do
}
};
Bag operator+(Bag a, Bag const& b) {
// notice a is passed by value, so it's a copy
a += b;
return a;
}
Nguồn
2010-03-28 07:12:19
Hàm 'operator +' có thiếu câu lệnh 'return' không? –
Điều này có vẻ không hợp lệ C++ - mới là từ khóa – Artyom
Nếu bạn muốn tạo toán tử, tôi khuyên bạn nên xem 'Boost.Operators'. Họ đã nhóm các toán tử tương tự lại với nhau (như '+ =' và '+') và chỉ viết một trong các nhóm cấp cho bạn những người khác miễn phí :) –