Sự khác nhau giữa nạp chồng toán tử tiền tố và hậu tố trong C++

Chúng ta biết rằng một toán tử nhị phân nhận hai toán hạng mà nó thực hiện phép toán. Ví dụ, nói toán tử cộng cộng hai số. Chúng tôi gọi hai số này là toán hạng và '+' là toán tử nhị phân. Bây giờ chúng ta hãy xử lý số '-12'. Ở đây dấu trừ cho biết phủ định của số. Toán tử phủ định chỉ hoạt động trên một toán hạng. Vì vậy, chúng ta có thể nói '-' với tư cách là Toán tử đơn hạng. Trong ví dụ này, chúng ta sẽ xem cách nạp chồng Toán tử đơn hạng ++ ở cả dạng tiền tố và hậu tố

2. Lớp Số cho Quá tải Tiền tố và Quá tải PostFix

Lớp

Con số

hiển thị bên dưới có hai thành viên số nguyên riêng. Hàm tạo có hai tham số nguyên đặt giá trị mặc định cho các thành viên riêng của lớp. Phương thức in của lớp này in các giá trị thành viên riêng trong đầu ra của bàn điều khiển

Trong đoạn mã dưới đây, chúng ta cũng nạp chồng toán tử nhị phân +. Để biết thêm thông tin về Nạp chồng toán tử nhị phân, hãy đọc bài viết tại đây. Nạp chồng toán tử nhị phân. Mã ban đầu cho lớp bên dưới

C++

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

 

//Mẫu 01. Một lớp biểu thị hai số (Chỉ dành cho ví dụ)

lớp Số

{

riêng tư.

    int m_Number1;

    int m_Number2;

công khai.

    //Mẫu 02. Trình tạo

    Số(int x, int y)

    {

        m_Number1 = x;

        m_Number2 = y;

    }

    //Mẫu 03. Phương thức in

    vô hiệu in()

    {

        cout<<"m_Number1 ="<< m_Number1<<endl;

        cout<<"m_Number2 ="<<m_Number2<<endl;

    }

    //Mẫu 04. Quá tải toán tử nhị phân +

    Toán tử Số+(TheNumber obj2)

    {

        int loc_Number1 = m_Number1 + obj2.m_Number1;

        int loc_Number2 = m_Number2 + obj2.m_Number2;

        return TheNumber(loc_Number1, loc_Number2);

    }

};

 

3. Quá tải Gia tăng tiền tố Toán tử ++

3. 1 Triển khai quá tải tiền tố

Chúng ta có thể viết mã toán tử tiền tố giống như cách chúng ta đã làm đối với toán tử nhị phân +. Lưu ý rằng việc triển khai không nhận bất kỳ đối số nào và chính đối tượng gọi sẽ cung cấp dữ liệu cho toán hạng đầu tiên. Hãy xem cách triển khai bên dưới

C++

1

2

3

4

5

6

7

8

9

 

//Mẫu 05. Quá tải Toán tử tiền tố đơn vị

Toán tử TheNumber operator++()

{

    m_Number1 = m_Number1 + 1;

    m_Number2 = m_Number2 + 1;

    return *this;

}

 

Trong triển khai này, chúng tôi tăng cả hai thành viên riêng tư bằng cách thêm một vào nó. Sau đó, chúng tôi trả lại đối tượng hiện tại cho người gọi. Hãy nhớ rằng đối tượng hiện tại là toán hạng duy nhất có thể được gọi là hàm này. Với toán tử quá tải này, bây giờ có thể sử dụng ký hiệu tiền tố của số gia trên một đối tượng. Ví dụ: nếu đối tượng là K, thì chúng ta có thể sử dụng ++K, để tăng cả hai thành viên riêng của nó

3. 2 Sử dụng tiền tố quá tải

Bây giờ hãy xem mã sử dụng được hiển thị bên dưới

C++

1

2

3

4

5

6

7

8

9

 

// Cách sử dụng 01. Mã sử ​​dụng toán tử đơn nguyên và nhị phân

Số num1(1,1);

Số num2(1,1);

// Cách sử dụng 02. Sử dụng toán tử tăng tiền tố

TheNumber num3 = ++num1 + ++num2;

num3. in();

 

Trong trường hợp trên, chúng tôi đã tạo hai đối tượng. họ đang

số1

số2

Các

cách sử dụng02

đoạn mã áp dụng toán tử tiền tố trên cả hai đối tượng

số1

số2

trước khi cộng chúng lại với nhau bằng toán tử +

3. 3 Chuỗi cuộc gọi

Trình tự gọi của Quá tải tiền tố diễn ra như thế này

  1. Đầu tiên, C++ gọi số gia tiền tố cho num1
  2. Thứ hai, toán tử tăng tiền tố cho đối tượng num2 được gọi.
  3. Thứ ba, toán tử nhị phân + được gọi trên cả hai đối tượng num1num2

Ở bước 1, các thành viên riêng cho

số1

đối tượng được tăng lên và đối tượng được trả về. Ở bước 2, các thành viên riêng cho

số2

đối tượng được tăng lên và

số2

Được trả lại. Trong bước thứ ba, chúng tôi thêm các đối tượng gia tăng bằng cách sử dụng toán tử nhị phân quá tải cộng với. Vì vậy, chúng ta sẽ thấy kết quả như hình bên dưới

Sự khác nhau giữa nạp chồng toán tử tiền tố và hậu tố trong C++
Sự khác nhau giữa nạp chồng toán tử tiền tố và hậu tố trong C++

Đầu ra chương trình toán tử tiền tố

Hình dưới đây giải thích quá trình trên

Sự khác nhau giữa nạp chồng toán tử tiền tố và hậu tố trong C++
Sự khác nhau giữa nạp chồng toán tử tiền tố và hậu tố trong C++

Trình tự toán tử tiền tố quá tải

4. Nạp chồng toán tử Postfix ++

4. 1 Triển khai quá tải Postfix

Trong C++, chúng ta nên nạp chồng toán tử hậu tố hơi khác một chút. Điều này là để giúp thời gian chạy để tránh sự mơ hồ. Đầu tiên, hàm toán tử lấy một đối số nguyên giả để phân biệt điều này với toán tử quá tải tiền tố. Tiếp theo, trong quá trình triển khai, chúng tôi sao chép đối tượng. Sau đó, tăng đối tượng gọi i. e. tại toán hạng một. Cuối cùng, trả lại đối tượng nhân bản. Bằng cách này, chúng ta thấy sự gia tăng diễn ra sau khi thực hiện câu lệnh. Hãy xem cách triển khai bên dưới

C++

1

2

3

4

5

6

7

8

9

10

 

//Mẫu 06. Quá tải toán tử Postfix Unary

TheNumber operator++(int dummyNo)

{

        Số được nhân bản = (*this);

        m_Number1 = m_Number1 + 1;

        m_Number2 = m_Number2 + 1;

        trả lại nhân bản;

}

 

Lưu ý rằng chúng tôi thực hiện sao chép trước. Sau đó, chúng tôi thực hiện gia tăng trên đối tượng cục bộ. Cuối cùng, chúng tôi trả lại bản sao được sao chép cho người gọi. Vì vậy, theo quan điểm của người gọi, biểu thức chứa toán tử, chỉ nhận được bản sao được sao chép. Sau khi thực hiện xong ‘câu lệnh biểu thức’, ta thấy phần tăng tham gia vào toán hạng. Tham số giả không làm bất cứ điều gì ở đây, phải không?

4. 2 Sử dụng Postfix quá tải

Nhìn vào đoạn mã dưới đây sử dụng toán tử postfix

C++

1

2

3

4

5

6

7

8

9

 

// Cách sử dụng 03. Mã sử ​​dụng toán tử đơn nguyên và nhị phân

Số num1(1,1);

Số num2(1,1);

// Cách sử dụng 04. Sử dụng toán tử gia số hậu tố

TheNumber num4 = num1++ + num2++;

num4. in();

 

Ở đây, toán tử postfix cho

số1

được gọi đầu tiên. Sau đó toán tử tiền tố cho

số2

được gọi là. Nhưng toán tử hậu tố trên cả hai trường hợp đã trả về một bản sao được sao chép. Những bản sao này sau đó được thêm vào với nhau để có kết quả trong đối tượng

số4

.

Toán tử quá tải trả về bản sao được sao chép. Toán tử cộng nhị phân hoạt động trên các bản sao này. Nhưng, trong bộ nhớ thực tế của

số1

số2

, hàm toán tử của chúng tôi đã tăng các thành viên nội bộ lên 1. Vì vậy, khi chúng tôi chuyển sang câu lệnh tiếp theo, chúng tôi thấy các thành viên bên trong đã thay đổi

Sự khác nhau giữa nạp chồng toán tử tiền tố và hậu tố trong C++
Sự khác nhau giữa nạp chồng toán tử tiền tố và hậu tố trong C++

Đầu ra toán tử Postfix

4. 3 Chuỗi cuộc gọi

Để giải thích thêm, hãy xem hình dưới đây. Trong toán tử hậu tố, chúng tôi thực hiện các thay đổi trên các đối tượng thực. Tuy nhiên, chúng tôi trả lại bản sao được sao chép trước khi thay đổi được áp dụng. Toán tử cộng nhị phân thực sự hoạt động trên các bản sao được sao chép và do đó chúng tôi nhận được các phần tử có giá trị bằng hai trong đối tượng kết quả

Làm cách nào bạn có thể phân biệt giữa toán tử gia tăng tiền tố và hậu tố trong khi quá tải?

Nạp chồng toán tử gia tăng . Do đó, chúng ta cần hai định nghĩa hàm khác nhau để phân biệt giữa chúng. Điều này đạt được bằng cách chuyển một tham số int giả trong phiên bản tiền tố .

Sự khác biệt giữa toán tử tiền tố và hậu tố ++ là gì?

Sự khác biệt chính giữa tiền tố và hậu tố là ở chỗ tiền tố là ký hiệu viết toán tử trước toán hạng trong khi hậu tố là ký hiệu viết toán tử sau toán hạng.

Sự khác biệt giữa tiền tố và hậu tố là gì?

Ký hiệu tiền tố là ký hiệu trong đó các toán tử được đặt trước các toán hạng tương ứng trong biểu thức. Ký hiệu hậu tố. Ký hiệu hậu tố là ký hiệu trong đó các toán tử được đặt sau toán hạng tương ứng trong biểu thức

Sự khác biệt giữa i ++ và ++ IC là gì?

++i sẽ tăng giá trị của i , sau đó trả về giá trị đã tăng. i++ sẽ tăng giá trị của i , nhưng trả về giá trị ban đầu mà tôi đã giữ trước khi được tăng .