Trong ví dụ này, bạn sẽ học cách nạp chồng toán tử tăng dần ++ và giảm dần - trong C ++.
Để hiểu ví dụ này, bạn nên có kiến thức về các chủ đề lập trình C ++ sau:
- Các lớp và đối tượng C ++
- Trình tạo C ++
- Nạp chồng toán tử C ++
Trong hướng dẫn này, toán tử tăng ++ và giảm - được nạp chồng theo cách tốt nhất có thể, tức là tăng giá trị của một thành viên dữ liệu lên 1 toán tử if ++ hoạt động trên một đối tượng và giảm giá trị của thành viên dữ liệu xuống 1 toán tử if - Được sử dụng.
Ví dụ 1: Nạp chồng toán tử tăng dần tiền tố ++ không có kiểu trả về
#include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) void operator ++() ( ++i; ) void Display() ( cout << "i=" << i << endl; ) ); int main() ( Check obj; // Displays the value of data member i for object obj obj.Display(); // Invokes operator function void operator ++( ) ++obj; // Displays the value of data member i for object obj obj.Display(); return 0; )
Đầu ra
i = 0 i = 1
Ban đầu khi đối tượng obj được khai báo, giá trị của thành viên dữ liệu i cho đối tượng obj là 0 (hàm tạo khởi tạo i bằng 0).
Khi toán tử ++ được vận hành trên obj, hàm toán tử void operator++( )
được gọi để tăng giá trị của phần tử dữ liệu i lên 1.
Chương trình này không hoàn chỉnh theo nghĩa là, bạn không thể sử dụng mã:
obj1 = ++ obj;
Đó là vì kiểu trả về của hàm toán tử trong chương trình trên là vô hiệu.
Đây là sửa đổi nhỏ của chương trình trên để bạn có thể sử dụng mã obj1 = ++obj
.
Ví dụ 2: Nạp chồng toán tử tăng tiền tố ++ với kiểu trả về
#include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) // Return type is Check Check operator ++() ( Check temp; ++i; temp.i = i; return temp; ) void Display() ( cout << "i = " << i << endl; ) ); int main() ( Check obj, obj1; obj.Display(); obj1.Display(); obj1 = ++obj; obj.Display(); obj1.Display(); return 0; )
Đầu ra
i = 0 i = 0 i = 1 i = 1
Chương trình này tương tự như chương trình ở trên.
Sự khác biệt duy nhất là, kiểu trả về của hàm toán tử là Kiểm tra trong trường hợp này cho phép sử dụng cả hai mã ++obj;
obj1 = ++obj;
. Đó là bởi vì, tạm thời trả về từ hàm toán tử được lưu trữ trong đối tượng obj.
Vì, kiểu trả về của hàm toán tử là Kiểm tra, bạn cũng có thể gán giá trị của obj cho một đối tượng khác.
Lưu ý rằng, = (toán tử gán) không cần phải được nạp chồng vì toán tử này đã được nạp chồng trong thư viện C ++.
Ví dụ 3: Nạp chồng toán tử Postfix tăng ++
Việc nạp chồng toán tử tăng cho đến thời điểm này chỉ đúng nếu nó được sử dụng ở dạng tiền tố.
Đây là sửa đổi của chương trình trên để làm cho nó hoạt động cho cả dạng tiền tố và dạng hậu tố.
#include using namespace std; class Check ( private: int i; public: Check(): i(0) ( ) Check operator ++ () ( Check temp; temp.i = ++i; return temp; ) // Notice int inside barcket which indicates postfix increment. Check operator ++ (int) ( Check temp; temp.i = i++; return temp; ) void Display() ( cout << "i = "<< i <
Output
i = 0 i = 0 i = 1 i = 1 i = 2 i = 1
When increment operator is overloaded in prefix form;
Check operator ++ ()
is called but, when increment operator is overloaded in postfix form; Check operator ++ (int)
is invoked.
Notice, the int inside bracket. This int gives information to the compiler that it is the postfix version of operator.
Don't confuse this int doesn't indicate integer.
Example 4: Operator Overloading of Decrement -- Operator
Decrement operator can be overloaded in similar way as increment operator.
#include using namespace std; class Check ( private: int i; public: Check(): i(3) ( ) Check operator -- () ( Check temp; temp.i = --i; return temp; ) // Notice int inside barcket which indicates postfix decrement. Check operator -- (int) ( Check temp; temp.i = i--; return temp; ) void Display() ( cout << "i = "<< i <
Output
i = 3 i = 3 i = 2 i = 2 i = 1 i = 2
Also, unary operators like: !, ~ etc can be overloaded in similar manner.