Khi kiểu dữ liệu bạn định nghĩa có nhiều thuộc tính, mỗi lần xuất ra phải nhờ vào hàm xuất do bạn tự định nghĩa vậy sao không định nghĩa luôn toán tử nhập xuất của iostream cho ngầu :) Let’s do it!

Kiểu dữ liệu mẫu

Không quá mới, chúng ta sẽ lấy lại kiểu dữ liệu PhanSo ở bài trước:

    #include <iostream>
    using namespace std;
     
    class PhanSo {
    	int TuSo;
    	int MauSo;
    	public:
    	PhanSo() {
    		TuSo = 1;
    		MauSo = 1;
    	}
     
    };
     
    int main() {
    	// your code goes here
    	return 0;
    }

Định nghĩa toán tử xuất («)

Trước tiên chúng ta sẽ xem xét các toán hạng, lấy ví dụ:

	...
  	cout << 2;
  	...

Với toán tử << chúng ta có 2 toán hạng:

  • Bên trái: cout (đối tượng kiểu ostream)
  • Bên phải: 2 (đối tượng kiểu int)

Vậy để định nghĩa cho lớp PhanSo, chúng ta sẽ sử dụng hàm bạn với cách viết như sau:

	...
  	friend ostream& operator<< (ostream &out, const PhanSo &ps);
  	...

Tiến hành cài đặt nào

    #include <iostream>
    using namespace std;
     
    class PhanSo {
    	int TuSo;
    	int MauSo;
    	public:
    	PhanSo() {
    		TuSo = 1;
    		MauSo = 1;
    	}
    	friend ostream& operator<< (ostream &out, const PhanSo &ps) {
    		out << ps.TuSo << "/" << ps.MauSo;
    		return out;
    	}
     
    };
     
    int main() {
    	PhanSo ps;
    	cout << ps << endl;
    	return 0;
    }

Các bạn chú ý phần thâm hàm, out chứ không phải cout nhé.

Định nghĩa toán tử nhập (»)

Về toán hạng cũng tương tự như toán tử xuất, chỉ khác điều cin là đối tượng thuộc kiểu istream nên chúng ta sẽ viết như sau:

	...
  	friend istream& operator>> (istream &in, const PhanSo &ps);
  	...

Và cách áp dụng:

    #include <iostream>
    using namespace std;
     
    class PhanSo {
    	int TuSo;
    	int MauSo;
    	public:
    	PhanSo() {
    		TuSo = 1;
    		MauSo = 1;
    	}
    	friend ostream& operator<< (ostream &out, const PhanSo &ps) {
    		out << ps.TuSo << "/" << ps.MauSo;
    		return out;
    	}
  		friend istream& operator>> (istream &in, PhanSo &ps) {
  			cout << "Nhap tu so: ";
  			in >> ps.TuSo;
  			cout << "Nhap mau so: ";
  			in >> ps.MauSo;
  			return in;
  		}
     
    };
     
    int main() {
    	PhanSo ps;
    	cin >> ps;
  		cout << ps << endl;
    	return 0;
    }

Kết quả chương trình:

	Nhap tu so: 2
	Nhap mau so: 3
	2/3

Tổng kết

Vậy là chúng ta đã biết cách nạp chồng toán tử nhập xuất. Các bạn luyện tập lại các ví dụ trên nhé, có thắc mắc các bạn bình luận bên dưới để tụi mình giải đáp. Pie~