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é Show 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ử) 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 đề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 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ăngNạ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++. Quay về với ví dụ trênNạ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 Có thể bạn quan tâm23 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ử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. Các loại toán tử
Đơ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ử képToá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 Các toán tử có thể tảiNạ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ử 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
Nạp tiền điện tử 2 ngôi1 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
Nếu không nhớ Hàm Bạn là gì? . at This Loading input input, outputViệc nạp chồng toán tử đầu vào cho phép người dùng sử dụng Đối với việc nạp chồng toán tử đầu vào 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. "; là >> đối tượng. tu; cout << "Nhap mau so. "; là >> đối tượng. mau; trả về là; }
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 Cách thức nạp chồng toán tử xuất 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 |