1.7.3 Output (2)

* Bạn có thể sử dụng nhiều hơn một toán tử << operator trong một câu lệnh với cout và mỗi phần tử được in có thể khác nhau về kiểu và khác nhau về bản chất.

Hãy phân tích ví dụ bên dưới. nó sử dụng một string literal và một biến integer trong cùng một câu lệnh với cout.

Ví dụ →

Đoạn code này sẽ cho kết quả là một string “Sheep counted so far: 123” được in ra màn hình.

* Một biểu thức cũng là một phần tử cout hợp lệ. Ví dụ bên dưới thể hiện một trường hợp như vậy →

* Nếu muốn một giá trị kiểu int được biểu diễn như một số dấu phẩy tĩnh hệ 16, bạn cần phải sử dụng cái gọi là manipulator. Một manipulator là một loại phần tử đặc biệt, nó dùng để nói cho stream biết rằng dạng (form) của dữ liệu phải được thay đổi ngay lập. Tất cả những phần tử được output sau khi manipulator được active sẽ được biểu diễn ở dạng mong muốn.

Một manipulator được thiết kế để chuyển stream sang chế độ hệ 16 (hexadecimal) được gọi là một hex. Đoạn code bên dưới sẽ output ra một string bao gồm ký tự ‘F’ và ‘F’.

Về mặt technical, một manipulator là một hàm làm thay đổi một trong những thuộc tính của output stream, được gọi là basefield. Thuộc tính được sử dụng để xác định số nào sẽ được dùng làm base trong quá trình chuyển đổi giá trị int thành dạng text mà con người có thể đọc được.

Có 2 yếu tố quan trọng mà bạn cần phải hiểu:

  1. Manipulator sẽ bắt đầu có tác dụng từ ví trí mà nó được đặt và tiếp tực có tác dụng ngay cả khi đã kết thúc câu lệnh cout; nó chỉ hết hiệu lực khi có một manipulator khác hủy bỏ nó;
  2. Tên của manipulator có thể xung đột với bất kỳ cái tên mapf đó được khai báo trong chương trình;

Ví dụ: bạn có thể có tên biến có thên là hex, nó có thể che mất manipulator.

Xung đột này có thể được giải quyết bằng một cơ chế đặc biệt gọi là namespace, chúng ta sẽ học về namespace sau.