Chi tiết bài học Nạp chồng toán tử trong C++

Nạp chồng toán tử trong C++

Trong C + +, trọn vẹn hoàn toàn có thể đổi khác cách toán tử hoạt động giải trí ( so với những kiểu người dùng định nghĩa ). Trong bài này, bạn sẽ được học cách lập trình tính năng nạp chồng toán tử .

Ý nghĩa của một toán tử luôn luôn là như nhau đối với các biến thuộc kiểu cơ bản như int, float, double…Ví dụ khi cộng hai số nguyên, toán tử + được sử dụng.

Tuy nhiên, so với kiểu người dùng định nghĩa ( như đối tượng người dùng ), bạn hoàn toàn có thể định nghĩa lại cách toán tử hoạt động giải trí. Ví dụ :
Nếu có hai đối tượng người dùng của một lớp chứa chuỗi là tài liệu thành viên. Bạn hoàn toàn có thể định nghĩa lại ý nghĩa của toán tử + và dùng nó để nối những chuỗi đó .
Tính năng trong lập trình C + + được cho phép lập trình viên định nghĩa lại ý nghĩa của một toán tử ( khi họ thao tác trên những đối tượng người tiêu dùng lớp ) được gọi là nạp chồng toán tử .

Tại sao nạp chồng toán tử được sử dụng?

Bạn hoàn toàn có thể viết bất kể chương trình C + + nào mà không cần biết nạp chồng toán tử. Tuy nhiên, nạp chồng toán tử được những lập trình viên rất hay sử dụng để khiến chương trình trở nên có nghĩa hơn. Ví dụ :
Bạn hoàn toàn có thể thay thế sửa chữa đoạn mã nguồn dưới đây :

calculation = add(multiply(a, b),divide(a, b));

thành

calculation = (a*b)+(a/b);

Làm thế nào để nạp chồng toán tử trong lập trình C++?

Để nạp chồng một toán tử, một hàm toán tử đặc biệt quan trọng cần được định nghĩa trong lớp như sau :

class tên_lớp
{
    ... .. ...
    public
       kiểu_trả_về operator ký_hiệu (đối_số)
       {
           ... .. ...
       } 
    ... .. ...
};
  • Ở đây, kiểu_trả_về là kiểu giá trị hàm sẽ trả về

  • kiểu_trả_về của hàm được theo sau bởi từ khóa operator

  • ký_hiệu là ký hiệu của toán tử bạn muốn nạp chồng. Ví dụ : +, <, -, + +

  • Bạn hoàn toàn có thể truyền vào tham số cho hàm toán tử tựa như như với những hàm khác .

Ví dụ: Nạp chồng toán tử trong lập trình C++

#include 
using namespace std;

class Test
{
   private:
      int count;

   public:
       Test(): count(5){}

       void operator ++() 
       { 
          count = count+1; 
       }
       void Display() { cout<<"Count: "<

Đầu ra

Count : 6

Hàm này được gọi khi toán tử ++ thao tác trên các đối tượng của lớp Test(đối tượng t trong trường hợp này).

Trong chương trình, hàm toán tử void operator + + ( ) được định nghĩa ( trong lớp Test ) .
Hàm này sẽ tăng giá trị của count lên 1 cho đối tượng người dùng t .

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

  1. Nạp chồng toán tử được cho phép bạn định nghĩa lại cách mà toán tử hoạt động giải trí chỉ so với những kiểu do người dùng định nghĩa ( đối tượng người tiêu dùng, cấu trúc ). Nó không hề được sử dụng cho những kiểu dựng sẵn ( int, float, char … ) .

  2. Hai toán tử = và và đã mặc định được nạp chồng trong C + +. Ví dụ : để sao chép đối tượng người tiêu dùng thuộc cùng lớp, bạn hoàn toàn có thể trực tiếp sử dụng toán tử =. Bạn không cần tạo một hàm toán tử .

  3. Nạp chồng toán tử không hề biến hóa thứ tự thực thi và năng lực phối hợp của những toán tử. Tuy nhiên, nếu bạn muốn đổi khác thứ tự của việc nhìn nhận, bạn hoàn toàn có thể sử dụng dấu ngoặc .

  4. Có 4 toán tử không thể bị nạp chồng trong C++. Chúng là :: (phân giải phạm vi),. (lựa chọn thành viên),. * (lựa chọn thành viên thông qua con trỏ tới hàm) và ? : (toán tử tam nguyên).

Những trường hợp khuyến khích sử dụng khi dùng nạp chồng toán tử

Nạp chồng toán tử được cho phép bạn định nghĩa cách toán tử hoạt động giải trí ( theo cách bạn muốn ) .
Trong ví dụ trên, toán tử + + sẽ thao tác trên đối tượng người tiêu dùng để tăng giá trị của tài liệu thành viên count lên 1 .

void operator ++() 
    { 
        count = count+1; 
    }

Tuy nhiên, nếu bạn sử dụng đoạn mã sau. Nó sẽ giảm giá trị của count đi 100 khi toán tử + + được sử dụng .

void operator ++() 
    { 
        count = count-100; 
    }

Về mặt kỹ thuật, đây là câu lệnh hợp cách. Nhưng đoạn mã này sẽ khiến việc hiểu và gỡ lỗi trở nên rắc rối và phức tạp hơn.

Công việc của lập trình viên đó là sử dụng nạp chồng toán tử một cách hài hòa và hợp lý và giống hệt .
Trong ví dụ trên, giá trị của count được tăng lên 1 khi toán tử + + được sử dụng. Tuy nhiên, chương trình này lại không hoàn thành xong vì bạn sẽ không hề sử dụng đoạn mã như :

t1 = ++t

Đó là do kiểu trả về của hàm toán tử là void .