Nạp chồng toán tử C ++ với các ví dụ

Mục lục:

Anonim

Quá tải nhà điều hành là gì?

Sử dụng nạp chồng toán tử trong C ++, bạn có thể chỉ định nhiều hơn một ý nghĩa cho một toán tử trong một phạm vi. Mục đích của việc nạp chồng toán tử là cung cấp ý nghĩa đặc biệt của toán tử đối với kiểu dữ liệu do người dùng định nghĩa.

Với sự trợ giúp của việc nạp chồng toán tử, bạn có thể xác định lại phần lớn các toán tử C ++. Bạn cũng có thể sử dụng tính năng nạp chồng toán tử để thực hiện các thao tác khác nhau bằng cách sử dụng một toán tử.

Trong hướng dẫn C ++ này, bạn sẽ học:

  • Quá tải nhà điều hành là gì?
  • Cú pháp
  • Các cách tiếp cận khác nhau đối với quá tải toán tử trong C ++
  • Tất cả các toán tử C ++ có thể bị quá tải không?
  • Những điều cần ghi nhớ:
  • Quy tắc cho quá tải nhà điều hành:
  • Làm thế nào để quá tải nhà điều hành:

Cú pháp

Để nạp chồng toán tử C ++, bạn nên xác định một hàm đặc biệt bên trong Lớp như sau:

class class_name{… publicreturn_type operator symbol (argument(s)){… }… };

Đây là giải thích cho cú pháp trên:

  • Kiểu_trả lại là kiểu trả về cho hàm.
  • Tiếp theo, bạn đề cập đến từ khóa toán tử.
  • Biểu tượng biểu thị ký hiệu toán tử được nạp chồng. Ví dụ, +, -, <, ++.
  • (Các) đối số có thể được truyền cho hàm toán tử theo cách tương tự như các hàm.

Ví dụ 1:

#include using namespace std;class TestClass {private:int count;public:TestClass() : count(5) {}void operator --() {count = count - 3;}void Display() {cout << "Count: " << count; }};int main() {TestClass tc;--tc;tc.Display();return 0;}

Đầu ra:

Đây là ảnh chụp màn hình của mã:

Giải thích mã:

  1. Bao gồm tệp tiêu đề iostream trong mã của chúng tôi để sử dụng các chức năng của nó.
  2. Bao gồm không gian tên std trong chương trình của chúng tôi để sử dụng các lớp của nó mà không cần gọi nó.
  3. Tạo một lớp có tên TestClass.
  4. Sử dụng công cụ sửa đổi quyền truy cập riêng tư, công cụ này đánh dấu một thành viên trong lớp là có thể truy cập riêng tư.
  5. Tạo một số biến số nguyên. Biến này sẽ có thể truy cập được ở chế độ riêng tư.
  6. Sử dụng công cụ sửa đổi quyền truy cập công khai, công cụ này đánh dấu một thành viên trong lớp là có thể truy cập riêng tư.
  7. Sử dụng một phương thức khởi tạo lớp để khởi tạo bộ đếm biến thành 5.
  8. Quá tải ý nghĩa của toán tử -.
  9. Toán tử sẽ giảm giá trị của biến x đi 1.
  10. Kết thúc phần nạp chồng toán tử. Nhà điều hành đã được đặt một tên mới.
  11. Định nghĩa một hàm có tên là hàm Display ().
  12. In giá trị của biến đếm cùng với văn bản khác trên bảng điều khiển khi hàm Display () được gọi. Dấu} đánh dấu phần cuối của phần nội dung của hàm Display ().
  13. Kết thúc phần thân của lớp.
  14. Gọi hàm main (). Logic chương trình nên được thêm vào trong hàm này.
  15. Tạo một thể hiện của lớp TestClass và đặt tên là tc.
  16. Điều này sẽ gọi hàm void operator - ().
  17. Sử dụng lập trường của Lớp TestClass để gọi hàm Display ().
  18. Hàm phải trả về giá trị khi hoàn thành thành công.
  19. Cuối phần thân của hàm main ().

Các cách tiếp cận khác nhau đối với quá tải toán tử trong C ++

Bạn có thể thực hiện nạp chồng toán tử bằng cách triển khai bất kỳ loại hàm nào sau đây:

  1. Chức năng thành viên
  2. Chức năng không phải thành viên
  3. Chức năng bạn bè
  • Hàm nạp chồng toán tử có thể là một hàm thành viên khi toán hạng Trái là một đối tượng của Lớp.
  • Khi toán hạng bên trái khác, hàm nạp chồng toán tử phải là một hàm không phải thành viên.

Bạn có thể đặt hàm nạp chồng toán tử thành hàm bạn bè nếu nó cần truy cập các thành viên lớp riêng tư và được bảo vệ.

Tất cả các toán tử C ++ có thể bị quá tải không?

Không. Có những toán tử C ++ không thể được nạp chồng.

Chúng bao gồm:

  • :: Toán tử độ phân giải kính
  • ?: Toán tử bậc ba.
  • . -member selector
  • Toán tử Sizeof
  • * - bộ chọn con trỏ ghi nhớ

Những điều cần ghi nhớ:

  1. Với tính năng nạp chồng toán tử, bạn có thể xác định lại cách thức hoạt động của toán tử chỉ đối với các kiểu do người dùng xác định (đối tượng, cấu trúc). Bạn không thể sử dụng nó cho các kiểu cài sẵn (float, char, int, v.v.).
  2. Các toán tử = và & C ++ được nạp chồng theo mặc định. Ví dụ, bạn có thể sao chép trực tiếp các đối tượng của cùng một Lớp bằng cách sử dụng toán tử =.
  3. Mức độ ưu tiên của toán tử không thay đổi mức độ liên kết và ưu tiên của các toán tử. Tuy nhiên, bạn có thể thay đổi thứ tự đánh giá bằng cách sử dụng dấu ngoặc đơn.
  4. Có bốn toán tử mà bạn không thể nạp chồng trong C ++. Chúng bao gồm toán tử phân giải phạm vi (: :), toán tử lựa chọn thành viên (.), Lựa chọn thành viên thông qua một con trỏ tới toán tử hàm (. *) Và toán tử bậc ba (? :).

Quy tắc cho quá tải nhà điều hành:

Dưới đây là các quy tắc về Nạp chồng toán tử:

  • Để nó hoạt động, ít nhất một toán hạng phải là một đối tượng lớp do người dùng định nghĩa.
  • Bạn chỉ có thể quá tải các toán tử hiện có. Bạn không thể làm quá tải các toán tử mới.
  • Một số toán tử không thể bị quá tải bằng cách sử dụng hàm bạn bè. Tuy nhiên, các toán tử như vậy có thể bị quá tải khi sử dụng hàm thành viên.

Làm thế nào để quá tải nhà điều hành:

Ví dụ 1:

#include using namespace std;class OperatorOverload {private:int x;public:OperatorOverload() : x(10) {}void operator ++() {x = x + 2;}void Print() {cout << "The Count is: " << x;}};int main() {OperatorOverload ov;++ov;ov.Print();return 0;}

Đầu ra:

Đây là ảnh chụp màn hình của mã:

Giải thích mã:

  1. Bao gồm tệp tiêu đề iostream trong mã của chúng tôi để sử dụng các chức năng của nó.
  2. Bao gồm không gian tên std trong chương trình của chúng tôi để sử dụng các lớp của nó mà không cần gọi nó.
  3. Tạo một lớp có tên OperatorOverload.
  4. Sử dụng công cụ sửa đổi quyền truy cập riêng tư, công cụ này đánh dấu một thành viên trong lớp là có thể truy cập riêng tư.
  5. Tạo một biến số nguyên x. Biến này sẽ có thể truy cập được ở chế độ riêng tư.
  6. Sử dụng công cụ sửa đổi quyền truy cập công khai, công cụ này đánh dấu một thành viên trong lớp là có thể truy cập riêng tư.
  7. Sử dụng một hàm tạo lớp để khởi tạo biến x thành 10.
  8. Quá tải ý nghĩa của toán tử ++.
  9. Toán tử sẽ tăng giá trị của biến x với 2.
  10. Kết thúc phần nạp chồng toán tử. Nhà điều hành đã được đặt một tên mới.
  11. Gọi hàm Print ().
  12. In giá trị của biến x cùng với văn bản khác trên bảng điều khiển khi hàm Print () được gọi.
  13. Cuối phần nội dung của hàm Print ().
  14. Kết thúc phần thân của lớp.
  15. Gọi hàm main (). Logic chương trình nên được thêm vào trong hàm này.
  16. Tạo một thể hiện của Lớp OperatorOverload có tên là ov.
  17. Điều này sẽ gọi hàm void operator ++ ().
  18. Sử dụng lập trường của lớp OperatorOverload để gọi hàm Print ().
  19. Hàm phải trả về giá trị khi hoàn thành thành công.
  20. Cuối phần thân của hàm main ().

Ví dụ 2:

#includeusing namespace std;class TestClass {private:int real, over;public:TestClass(int rl = 0, int ov = 0) {real = rl;over = ov;}TestClass operator + (TestClass const &obj) {TestClass result;result.real = real + obj.real;result.over = over + obj.over;return result;}void print() {cout << real << " + i" << over << endl;}};int main(){TestClass c1(9, 5), c2(4, 3);TestClass c3 = c1 + c2;c3.print();}

Đầu ra:

Đây là ảnh chụp màn hình của mã:

Giải thích mã:

  1. Đưa tệp tiêu đề iostream vào chương trình của chúng tôi để sử dụng các chức năng của nó.
  2. Bao gồm không gian tên std vào chương trình của chúng tôi để sử dụng các lớp của nó mà không cần gọi nó.
  3. Tạo một lớp có tên TestClass. Dấu {đánh dấu phần đầu của phần thân lớp.
  4. Sử dụng công cụ sửa đổi quyền truy cập riêng tư để đánh dấu các biến là riêng tư, nghĩa là chúng chỉ có thể được truy cập từ bên trong Lớp.
  5. Xác định hai biến số nguyên, thực và hơn.
  6. Sử dụng công cụ sửa đổi quyền truy cập công khai để đánh dấu phương thức khởi tạo là công khai, có nghĩa là nó sẽ có thể truy cập được ngay cả bên ngoài Lớp.
  7. Tạo phương thức khởi tạo lớp và khởi tạo các biến.
  8. Khởi tạo giá trị của biến thực.
  9. Khởi tạo giá trị của biến trên.
  10. Phần cuối của phần thân hàm tạo.
  11. Ghi đè nghĩa của toán tử +.
  12. Tạo kết quả kiểu dữ liệu kiểu TestClass.
  13. Sử dụng toán tử + với các số phức. Dòng này sẽ thêm phần thực của một số vào phần thực của một số khác.
  14. Sử dụng toán tử + với các số phức. Dòng này sẽ thêm phần ảo của một số vào phần ảo của một số khác.
  15. Chương trình sẽ trả về giá trị của kết quả biến khi thực hiện thành công.
  16. Kết thúc định nghĩa về nghĩa mới của toán tử +, tức là nạp chồng.
  17. Gọi phương thức print ().
  18. In số phức mới sau khi cộng trên bảng điều khiển.
  19. Cuối phần nội dung của hàm print ().
  20. Cuối phần thân của Lớp TestClass.
  21. Gọi hàm main ().
  22. Chuyển các giá trị của cả phần thực và phần phức tạp được thêm vào. Phần đầu tiên của c1 sẽ được thêm vào phần đầu tiên của c2, tức là, 9 + 4. Phần thứ hai của c1 sẽ được thêm vào phần thứ hai của c, tức là, 5 + 3.
  23. Thực hiện một hoạt động bằng cách sử dụng toán tử + được nạp chồng và lưu trữ kết quả trong biến c3.
  24. In giá trị của biến c3 trên bảng điều khiển.
  25. Cuối phần thân của hàm main ().

Tóm lược:

  • Bạn có thể chỉ định nhiều nghĩa cho toán tử C ++ trong một phạm vi.
  • Đây được gọi là quá tải toán tử.
  • Nạp chồng toán tử cung cấp ý nghĩa đặc biệt của toán tử đối với kiểu dữ liệu do người dùng xác định.
  • Bạn có thể xác định lại phần lớn các toán tử C ++ thông qua việc nạp chồng toán tử.
  • Không phải tất cả các toán tử C ++ đều có thể được nạp chồng.
  • Để một toán tử được nạp chồng, ít nhất một trong các toán hạng phải là một đối tượng do người dùng định nghĩa.
  • Chỉ các toán tử hiện có mới có thể được nạp chồng. Bạn không thể quá tải các toán tử mới.