Toán tử istream trong c++

Chào cả nhà, lại là mình đây. Trong bài tiếp theo chúng ta sẽ cùng tìm hiểu về Nạp chồng toán tử và Nạp chồng hàm là gì nhé

Ngôn ngữ C++ cho phép bạn xác định nhiều hơn một định nghĩa cho một tên hàm hoặc một toán tử trong cùng phạm vi (phạm vi), được gọi tương ứng là Nạp chồng hàm (nạp chồng hàm) và Nạp chồng toán tử (nạp chồng toán tử)

Toán tử istream trong c++
Toán tử istream trong c++

Một tuyên bố nạp chồng là một tuyên bố đã được khai báo với cùng tên như một tuyên bố đã được khai báo trước đó trong cùng một phạm vi, ngoại trừ điều đó. cả hai báo cáo đều có các tham số khác nhau và định nghĩa khác nhau

Khi bạn gọi một hàm nạp hoặc một hàm nạp toán tử, thì trình biên dịch quyết định giải thích ý nghĩa hợp nhất để sử dụng bằng cách so sánh các kiểu tham số bạn đã sử dụng để gọi hàm hoặc toán tử với các kiểu tham số . Trình lựa chọn lựa chọn chức năng nạp chồng hoặc nạp toán tử thích hợp nhất được gọi là giải nạp chồng (độ phân giải quá tải)

NỘI DUNG BÀI VIẾT

  • Load Chồng Hàm
    • Đặt vấn đề
    • Nạp chồng chức năng
  • Nạp Chồng Toán Tử
    • Giới thiệu về nạp tiền điện tử
    • Các loại toán tử
      • Đơn vị toán tử
      • Toán tử kép
      • Các toán tử có thể tải
    • Nạp tiền điện tử
      • Nạp tiền điện tử 1 ngôi nhà
      • Nạp tiền điện tử 2 ngôi
      • Loading input input, output
      • Nạp chồng toán tử
  • Tài Liệu Tham Khảo

Load Chồng Hàm

Toán tử istream trong c++
Toán tử istream trong c++

Đặt vấn đề

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#include

sử dụng không gian tên std;

 

int int_max(int a, int b)

{

    nếu (a > b)

        trả lại a;

   khác

        trả lại b;

}

 

int chính()

{  

    cout << "int max = " < int_max(4, 5);

 

    return 0;

}

Trong ví dụ trên, sau khi chạy chương trình ta nhận được kết quả

1

int tối đa = 5

Nhưng nếu ta thay int_max(4,5) thành int_max(4.4,5.5) thì kết quả nhận được vẫn là int max = 5 giống phía trên, do khao báo hàm ta truyền vào . Do đó để có kết quả đúng là 5.5 thì ta phải viết thêm một hàm mới.

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

/* Mã của KingNNT */

#include

sử dụng không gian tên std;

 

int int_max(int a, int b)

{

    nếu (a > b)

        trả lại a;

   khác

        trả lại b;

}

 

int float_max(float a, float b)

{

    nếu (a > b)

        trả lại a;

   khác

        trả lại b;

}

 

int chính()

{

    cout << "int max = " < int_max(4, 5) << endl;

    cout << "float max = " < . 4 float_max(4.4, 5. 5) << endl;

 

    return 0;

}

Như vậy, ta sẽ có nhiều hàm với các tên gọi khác nhau. Việc sử dụng tên như vậy sẽ gây bất lợi cho người lập trình khi gọi hàm. Nạp lại hàm ra đời để giải quyết vấn đề trên

Nạp chồng chức năng

Nạp chồng hàm (Function Overloading) là một kiến ​​thức khá mới mẻ đối với các bạn mới bắt đầu làm quen với C++. Bởi vì kiến ​​thức này không tồn tại trong C mà chỉ tồn tại trong C++.
Kỹ thuật này cho phép sử dụng cùng tên gọi cho các hàm “giống nhau” (có cùng đích). Nhưng khác nhau về kiểu tham số dữ liệu hoặc tham số lượng.

Quay về với ví dụ trên

Nạp hàm cho phép ta khai báo và định nghĩa các hàm trên cùng với một tên gọi

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

#include

sử dụng không gian tên std;

 

int max(int a, int b)

{

    nếu (a > b)

        trả lại a;

   khác

        trả lại b;

}

 

int max(float a, float b)

{

    nếu (a > b)

        trả lại a;

   khác

        trả lại b;

}

 

int chính()

{

    cout << "int max = " < max(4, 5) << endl;

    cout << "float max = " < . 4 max(4.4, 5. 5) << kết thúc;

 

    return 0;

}

Sau khi chạy ta có kết quả

1

2

int tối đa = 5

nổi tối đa = 5. 5

Nạp Chồng Toán Tử

Toán tử istream trong c++
Toán tử istream trong c++

Giới thiệu về nạp tiền điện tử

Nạp chồng toán tử (Operator Overloading) được sử dụng để định nghĩa toán tử cho sẵn trong C++ phục vụ cho dữ liệu riêng do bạn tạo ra.
Giao sử có lớp PhanSo và có các phương thức tính toán như Cong, Tru, Nhan, Chia.
Nếu gặp một biểu thức phức tạp, số lượng cho phép tính nhiều thì việc sử dụng các biểu thức trên khá khó khăn và có thể gây khó khăn cho người lập trình. Vì thế ta sẽ tải lại các toán tử để có thể tạo ra một cái nhìn trực quan vào mã, giảm thiểu các lỗi sai không đáng có.

Các loại toán tử

  • C++ chỉ cho phép người dùng quá tải lại các toán tử có sẵn trong C++
  • Một toán tử có thể được định nghĩa cho nhiều kiểu dữ liệu khác nhau

Toán tử istream trong c++
Toán tử istream trong c++

Đơn vị toán tử

Toán tử đơn là toán tử một ngôi (toán tử đơn nguyên), có thể được sử dụng để làm toán tử trước (toán tử tiền tố) và toán tử sau (toán tử hậu tố). Ví dụ cho phép tăng (++) hay cho phép giảm (–-)

Ví dụ

  • toán tử tiền tố. ++tôi;
  • toán tử hậu tố. tôi ++;

Toán tử kép

Toán tử kép là toán tử có 2 ngôi (toán tử nhị phân)

Ví dụ. as A+B, A*B, or TOÁN TỬ CHỈ MỤC […] also LÀ TOÁN TỬ ĐÔI

Các toán tử có thể tải

Toán tử istream trong c++
Toán tử istream trong c++

Nạp tiền điện tử

Nạp tiền điện tử 1 ngôi nhà

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

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

#include

sử dụng không gian tên std;

 

lớp phanso

{

riêng tư.

    int tu, mau;

 

công khai.

    phanso()

    {

        tu = mau = 0;

    }

 

    ~phanso()

    {

        tu = mau = 0;

    }

    

    vô hiệu đầu vào()

    {

        cout << "Nhap tu so. ";

        cin >> này->tu;

        cout << "Nhap mau so. ";

        cin >> này->mau;

    }

 

    vô hiệu đầu ra()

    {

        cout << này->tu << "/" << this->mau << endl;

    }

    

    

    toán tử phanso operator +(phanso b)

    {

        phanso c;

        c. tu = này-> . b.mau + này-> . b.tu;

        c. mau = này-> . b.mau;

        trả lại c;

    }    

};

 

int chính()

{

    phanso a, b, c;

 

    a. đầu vào();

    b. đầu vào();

 

    c = a + b;  c.đầu ra();

}

Ta truyền Input

1

2

1 2

3 4

Sau khi chạy chương trình ta có kết quả

1

8/10

Trong phần mã trên, mình đã nạp chồng toán tử + cho lớp phân số bằng cách nạp chồng toán tử 1 ngôi ( chỉ có thể truyền vào một tham số )

Với cách nạp chồng này, ta có thể coi nó là một phương thức của lớp

  • Tên phương thức sẽ có dạng operator @ – trong đó @ là toán tử cần nạp chồng

Nạp tiền điện tử 2 ngôi

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

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

/* Mã của KingNNT */

#include

sử dụng không gian tên std;

 

lớp phanso

{

riêng tư.

    int tu, mau;

 

công khai.

    phanso()

    {

        tu = mau = 0;

    }

 

    ~phanso()

    {

        tu = mau = 0;

    }

    

    vô hiệu đầu vào()

    {

        cout << "Nhap tu so. ";

        cin >> này->tu;

        cout << "Nhap mau so. ";

        cin >> này->mau;

    }

 

    vô hiệu đầu ra()

    {

        cout << này->tu << "/" << this->mau << endl;

    }

    

    bạn phanso toán tử +(phanso a, phanso b)

    {

        phanso c;

        c. tu = a. tu * b. mau + a. mau * b. tu;

        c. mau = a. mau * b. mau;

        trả lại c;

    }    

};

 

int chính()

{

    phanso a, b, c;

 

    a. đầu vào();

    b. đầu vào();

 

    c = a + b;  c.đầu ra();

}

Continue with Input as on

1

2

1 2

3 4

Sau khi biên dịch và chạy chương trình, kết quả vẫn nhận được là

1

8/10

Với cách nạp chồng toán tử 2 ngôi nhà này, thì hàm nạp chồng được coi là một hàm của lớp bạn

  • Có khóa từ int_max(4.4,5.5)0 ở đầu
  • Tên hàm là operator @– Trong đó @ vẫn là toán tử cần nạp chồng
  • 2 tham số được truyền vào là 2 giá trị thực cho phép tính toán

Nếu không nhớ Hàm Bạn là gì? . at This

Loading input input, output

Việc nạp chồng toán tử đầu vào cho phép người dùng sử dụng int_max(4.4,5.5)3, int_max(4.4,5.5)4 nhập xuất nhanh một đối tượng mà không cần gọi lại int_max(4.4,5.5)3,int_max(4.4,5.5)4 cho từng thuộc tính của dữ liệu dựa trên ý nghĩa được xác định trước đó

Đối với việc nạp chồng toán tử đầu vào int_max(4.4,5.5)7 và toán tử xuất int_max(4.4,5.5)8 ta sẽ sử dụng cách nạp chồng toán tử 2 ngôi

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

32

33

34

35

36

37

38

39

40

#include

sử dụng không gian tên std;

 

lớp phanso

{

riêng tư.

    int tu, mau;

 

công khai.

    phanso()

    {

        tu = mau = 0;

    }

 

    ~phanso()

    {

        tu = mau = 0;

    }

    bạn istream &nhà điều hành>>(istream &is, phanso &obj)

    {

        cout << "Nhap tu so. ";

         >> đối tượng. tu;

        cout << "Nhap mau so. ";

         >> đối tượng. mau;

        trả về ;

    }

 

    bạn ostream &toán tử<<(ostream &os, phanso obj)

    {

        os << obj. tu << "/" << obj.mau << endl;

        return như;

    }

};

 

int chính()

{

    phanso a;

    cin >> a;

    cout << a;

}

Đầu vào

1

1 2

đầu ra

1

1/2

Đối với toán tử đầu vào int_max(4.4,5.5)7 kiểu trả về của nó sẽ là int max = 50. Trong phần mã trên, mình truyền tham số đầu tiền là tham chiếu int max = 51. Sau đó phần code trong thân hàm, tất cả int_max(4.4,5.5)3 mình sẽ thay thế bằng int max = 51 và kết thúc hàm bằng int max = 54. Tham số thứ 2 được truyền vào cũng dưới dạng tham chiếu int max = 55 thuộc lớp int max = 56

Cách thức nạp chồng toán tử xuất int_max(4.4,5.5)8 Cũng tương tự như nạp chồng toán tử đầu vào int_max(4.4,5.5)7.
Điều khác biệt ở đây là int max = 59 có kiểu trả về là int0 và tham số thứ 2 truyền vào có thể là tham trị chứ không nhất thiết phải là tham chiếu.

You can see at Cách phân biệt Thẩm Chiếu và Thẩm Trị. at This

Nạp chồng toán tử

1

2

3

4

5

6

7

Lớp của tôi& Lớp của tôi. toán tử=(const MyClass &rhs)

{

    nếu (điều này == &rhs)      // kiểm tra có cùng đối tượng?

      return *this;        // Nếu trùng thì bỏ qua và return chính nó

    //Xử lý. (Cấp phát vùng nhớ mới, sao chép giá trị,. )

    return *this;

}

Cú pháp và cách xử lý gần giống với Hàm khởi tạo sao chép

Bài viết của mình tới đây là hết rồi. Nếu có bất kì thắc mắc hay đóng góp gì thì mọi người đừng ngại comment ngay phía dưới nhé. Rất mong nhận được sự ủng hộ của các bạn. Xin chào và hẹn gặp lại