Tìm hiều về cin và việc đa năng hóa toán tử >> << đối với các class
Trang 1 trong tổng số 1 trang
Tìm hiều về cin và việc đa năng hóa toán tử >> << đối với các class
Tìm hiểu về 2 toán tử << >>
Ngày hôm nay học về toán tử << và toán tử >> . Lúc đầu cảm thấy rất khó hiểu, về sau quyết định về nhà tìm hiểu bằng được họ hàng và gốc rễ thằng toán tử này mới được. Và sau 3h ngồi đọc mấy cái file .h ở trong thư mục BC. Đã phát hiện ra rất nhiều điều lý thú sau đây :
1. Xèng khẳng định đây là 1 toán tử bình thường có 2 toán hạng tham gia. Nó ko phải là 1 thứ đặc biết gắn liền với cin như các bạn nghĩ. Có nghĩa là ko phải cứ >> là phải đi liền với cin và << phải đi cùng với cout.
>> và << là 1 toán tử bình thường như + - * / mà trong đó cin, cout là 1 trong 2 thành phần tham gia vào phép toán mà thôi.
Ví dụ : a+b :đây là phép toán bao gồm 2 thành phần là a và b
cin>>a :đây là phép toán bao gồm 2 thành phần là cin và a
chứng minh :
Xèng viết đoạn code sau và nó chạy hoàn toàn đúng :
Tại sao xèng lại cố tình thay đổi vị trí của 2 thành phần tham gia, tại sao xèng lại a>>cin??
Vì xèng muốn khẳng định với các bạn rằng đây là 2 toán tử hoàn toàn bình thường như + - * / mà thôi. Nội tại nó ko có quy tắc gì đặc biệt cả.
Cái đặc biệt nằm trong thằng cin, cout. Thằng cin, cout nó có kiểu dữ liệu là istream và ostream.
Xèng đã đổi vị trí 2 thành phần và dùng a>>cin và a<
2. Giải thích thành phần 2 tham số :
Ta có : istream & operator >> (istream& is, phanso &x)
Ta thấy rõ ràng ở đây có 2 tham số.
1 là is có kiểu dữ liệu là istream& tương ứng với cin.
cin được định nghĩa trong iostream như sau :
Cái ta sẽ truyền vào chính là cin.
Nếu is ở đây chỉ là 1 tham biến hình thức, khi ta gọi cin>>a thì cin được truyền vào. Và cái is>>x.t>>x.m; lúc nãy cũng đơn giản chính là cin>>x.t>>x.m
Ok?
3. Giải thích tại sao phải trả về kiểu dữ liệu istream & và việc return
Như đã thấy ở trên. Xèng có thể dùng kiểu dữ liệu void. Nó vẫn hoàn toàn đúng. Ko có gì sai cả. vậy tại sao người ta ( thầy phạm văn ất, thầy quách tuấn ngọc) lại để kiểu dữ liệu trả về là istream &.
Điều đầu tiên ở bài 1 ,2 trên của xèng chỉ có thể dùng cin với 1 đối tượng chứ ko thể cin liên tiếp nhiều đối tượng. ko thể cin>>a>>b được. ha ha ha.
Nếu đổi về như này istream & operator>>( istream &is, phanso &x)) và return is thì lại có thể cin>>a>>b liên tiếp được
Giải thích nha
+ đầu tiên : 1 biểu thức toàn toán tử >> , toán tử này được ưu tiên thực hiện từ trái qua phải.
+ Vậy cin>>a được thực hiện trước. >> đã được đa năng hóa, thực hiện với 2 thành phần, thành phần 1 là cin và a
+ Sau đó return is cái gì được return ???? chính là cin. Vậy cin được trả về.
Biểu thức lúc này trở thành : (a đã được nhập)
cin>>b>>c
+ biểu thức vẫn toàn toán tử >> , toán tử này được ưu tiên thực hiện từ trái qua phải. vậy cin>>b tiếp tục được thực hiện và trả về cin. Sau khi nhập xong b thì trả về cin và biểu thức lại trở thành cin>>c;
Hj hj hj hj
Ok?
Ngày hôm nay học về toán tử << và toán tử >> . Lúc đầu cảm thấy rất khó hiểu, về sau quyết định về nhà tìm hiểu bằng được họ hàng và gốc rễ thằng toán tử này mới được. Và sau 3h ngồi đọc mấy cái file .h ở trong thư mục BC. Đã phát hiện ra rất nhiều điều lý thú sau đây :
1. Xèng khẳng định đây là 1 toán tử bình thường có 2 toán hạng tham gia. Nó ko phải là 1 thứ đặc biết gắn liền với cin như các bạn nghĩ. Có nghĩa là ko phải cứ >> là phải đi liền với cin và << phải đi cùng với cout.
>> và << là 1 toán tử bình thường như + - * / mà trong đó cin, cout là 1 trong 2 thành phần tham gia vào phép toán mà thôi.
Ví dụ : a+b :đây là phép toán bao gồm 2 thành phần là a và b
cin>>a :đây là phép toán bao gồm 2 thành phần là cin và a
chứng minh :
Xèng viết đoạn code sau và nó chạy hoàn toàn đúng :
- Code:
#include <iostream.h>
#include <conio.h>
class phanso
{
private:
int t; // tu
int m; // mau
public:
friend void operator>>(phanso &,istream &);
friend void operator<<(phanso,ostream&);
};
void operator>>(phanso &x,istream &is)
{
is>>x.t>>x.m;
}
void operator<<(phanso x,ostream &os)
{
os<<x.t<<"/"<<x.m;
}
void main(void)
{
clrscr();
phanso a;
a>>cin;
a<<cout;
getch();
}
Tại sao xèng lại cố tình thay đổi vị trí của 2 thành phần tham gia, tại sao xèng lại a>>cin??
Vì xèng muốn khẳng định với các bạn rằng đây là 2 toán tử hoàn toàn bình thường như + - * / mà thôi. Nội tại nó ko có quy tắc gì đặc biệt cả.
Cái đặc biệt nằm trong thằng cin, cout. Thằng cin, cout nó có kiểu dữ liệu là istream và ostream.
Xèng đã đổi vị trí 2 thành phần và dùng a>>cin và a<
2. Giải thích thành phần 2 tham số :
Ta có : istream & operator >> (istream& is, phanso &x)
Ta thấy rõ ràng ở đây có 2 tham số.
1 là is có kiểu dữ liệu là istream& tương ứng với cin.
cin được định nghĩa trong iostream như sau :
- Code:
istream_withassign _Cdecl cin;
Vì vậy khi ta cin>>a chính là ta truyền thằng cin vào và trở thành toán hạng đầu tiên, a là toán hạng tiếp theo
PHP Code:
#include <iostream.h>
#include <conio.h>
class phanso
{
private:
int t; // tu
int m; // mau
public:
friend void operator>>(istream &,phanso &);
};
void operator>>( istream &is, phanso &x)
{
is>>x.t>>x.m;
//cin>>x.t>>x.m
}
void main(void)
{
clrscr();
phanso a;
cin>>a;
getch();
}
Cái ta sẽ truyền vào chính là cin.
Nếu is ở đây chỉ là 1 tham biến hình thức, khi ta gọi cin>>a thì cin được truyền vào. Và cái is>>x.t>>x.m; lúc nãy cũng đơn giản chính là cin>>x.t>>x.m
Ok?
3. Giải thích tại sao phải trả về kiểu dữ liệu istream & và việc return
Như đã thấy ở trên. Xèng có thể dùng kiểu dữ liệu void. Nó vẫn hoàn toàn đúng. Ko có gì sai cả. vậy tại sao người ta ( thầy phạm văn ất, thầy quách tuấn ngọc) lại để kiểu dữ liệu trả về là istream &.
Điều đầu tiên ở bài 1 ,2 trên của xèng chỉ có thể dùng cin với 1 đối tượng chứ ko thể cin liên tiếp nhiều đối tượng. ko thể cin>>a>>b được. ha ha ha.
Nếu đổi về như này istream & operator>>( istream &is, phanso &x)) và return is thì lại có thể cin>>a>>b liên tiếp được
Giải thích nha
- Code:
#include <iostream.h>
#include <conio.h>
class phanso
{
private:
int t; // tu
int m; // mau
public:
friend istream & operator>>(istream &,phanso &);
};
istream & operator>>( istream &is, phanso &x)
{
is>>x.t>>x.m;
//cin>>x.t>>x.m
return is;
}
void main(void)
{
clrscr();
phanso a,b,c;
cin>>a>>b>>c;
getch();
}
+ đầu tiên : 1 biểu thức toàn toán tử >> , toán tử này được ưu tiên thực hiện từ trái qua phải.
+ Vậy cin>>a được thực hiện trước. >> đã được đa năng hóa, thực hiện với 2 thành phần, thành phần 1 là cin và a
+ Sau đó return is cái gì được return ???? chính là cin. Vậy cin được trả về.
Biểu thức lúc này trở thành : (a đã được nhập)
cin>>b>>c
+ biểu thức vẫn toàn toán tử >> , toán tử này được ưu tiên thực hiện từ trái qua phải. vậy cin>>b tiếp tục được thực hiện và trả về cin. Sau khi nhập xong b thì trả về cin và biểu thức lại trở thành cin>>c;
Hj hj hj hj
Ok?
Similar topics
» Lập kế hoạch và lịch trình công việc
» Tìm hiểu cách viết code cho Office thông qua Ví dụ
» Ông vua Toán học Carl Friedrich Gauss
» Những câu nói khó hiểu
» Filebox - kho lưu trữ đến 488GB hoàn toàn miễn phí
» Tìm hiểu cách viết code cho Office thông qua Ví dụ
» Ông vua Toán học Carl Friedrich Gauss
» Những câu nói khó hiểu
» Filebox - kho lưu trữ đến 488GB hoàn toàn miễn phí
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết