Sampai titik ini kita sudah beberapa kali menulis std::cout tanpa membahasnya secara utuh — saatnya sekarang. std::cout adalah objek output stream bawaan C++ yang mengirim data ke terminal, dan operator << adalah alat kita memasukkan data ke dalamnya. Sebagai jendela utama program ke arah pengguna, menguasai cout berarti menguasai cara melihat isi variabel, memeriksa hasil perhitungan, dan menelusuri jalannya program. Pada Chapter ini kita membahas operator <<, teknik merangkai beberapa nilai sekaligus (chaining), perbedaan endl dengan "\n", serta bagaimana C++ menampilkan angka, karakter, dan boolean secara default.

Objek cout dan Operator « #

Nama std::cout bisa dibaca “character output” yang tinggal di namespace std. Ia adalah objek bertipe std::ostream yang sudah tersambung ke standard output — jalur data bawaan yang biasanya berakhir di layar terminal. Konsep “stream” (aliran) bukan sekadar istilah: data mengalir satu arah, dari program menuju layar, berurutan sesuai urutan kita memasukkannya. Operator << disebut insertion operator (operator penyisipan) karena tugasnya menyisipkan nilai ke dalam aliran itu, dan penulisannya std::cout << nilai terbaca dari kiri ke kanan: sisipkan nilai ke cout. Kalimat std::cout << "Halo"; dengan demikian adalah perintah lengkap: ambil teks "Halo", sisipkan ke stream, dan stream-lah yang mengurus bagaimana byte-nya sampai ke terminal.

Merangkai Nilai dengan Chaining #

Salah satu kepraktisan cout yang membuatnya nyaman adalah chaining: satu pernyataan bisa menyisipkan banyak nilai berurutan tanpa perulangan kata std::cout:

cpp
int harga = 3000;
std::cout << "Harga: " << harga << " rupiah\n";

Rantai ini bekerja karena setiap << mengembalikan stream yang baru saja diisi. Hasil kembalian itu lalu dipakai oleh << berikutnya, sehingga a << b << c dievaluasi seperti ((a << b) << c) — satu rantai penyisipan yang panjang. Pemisahan teks dan nilai pada contoh di atas adalah pola yang sangat umum: potongan string sebagai bingkai, variabel sebagai isi, bergantian sesuai kebutuhan. Kita juga bebas memecah rantai ke beberapa baris (ingat, whitespace bebas) agar pernyataan panjang tetap mudah dibaca.

endl versus “\n” #

Keduanya memindahkan kursor ke baris baru, tetapi ada perbedaan penting di balik layar: std::endl menulis baris baru LALU memaksa flush, sedangkan "\n" hanya menulis karakter baris baru.

Aspekstd::endl"\n"
Menulis baris baruYaYa
Memaksa flush bufferYa, setiap dipakaiTidak
Efek saat dipakai banyakKompilasi jadi lebih lambat, output lebih lambatBuffer bekerja efisien
Cocok untukTitik yang memang butuh keluaran segeraKebutuhan harian

Flush adalah perintah “kosongkan buffer sekarang”: data yang masih menumpuk di memori diminta langsung dikirim ke tujuannya. Buffer itu sendiri adalah penyimpanan sementara yang membuat output efisien — mengirim satu karakter per satu karakter ke terminal jauh lebih mahal daripada mengirim sekaligus. Untuk kode belajar sehari-hari, "\n" adalah pilihan yang disarankan; simpan std::endl untuk kasus di mana pengguna benar-benar harus melihat keluaran pada saat itu juga (misalnya sebelum operasi yang lama dimulai). Detail pengaturan buffer dan manipulator lain dibedah pada Section Input-Output dan File.

Mencetak Angka, Karakter, dan Boolean #

cout menampilkan setiap tipe dengan format defaultnya, dan tiga perilaku default ini patut kita hafal:

  • Bilangan bulat (int) dicetak apa adanya: 21 tampil sebagai 21.
  • Boolean (bool) secara default dicetak sebagai angka: true menjadi 1 dan false menjadi 0. Memasang std::boolalpha mengubahnya menjadi teks true/false.
  • Bilangan pecahan (double) dicetak sampai 6 digit signifikan secara default: 3.14159265358979 tampil sebagai 3.14159, bukan lengkap.

Karakter tunggal bertipe char (ditulis dengan kutip tunggal, misalnya 'B') dicetak sebagai simbolnya, tanpa kutip. Perilaku presisi 6 digit sering mengejutkan pemula yang mengira angkanya “rusak” — padahal itu hanya batas format default yang bisa diubah dengan manipulator pada Section Input-Output dan File.

Program Lengkap: Semua dalam Satu #

Program berikut merangkum seluruh materi Chapter ini dan sudah diuji dari kompilasi sampai eksekusi:

cpp
#include <iostream>

int main() {
    int umur = 21;
    double tinggi = 172.5;
    char inisial = 'B';            // char: satu karakter, ditulis ' '
    bool lulus = true;             // bool: hanya true atau false

    std::cout << "Umur   : " << umur << " tahun\n";
    std::cout << "Tinggi : " << tinggi << " cm\n";
    std::cout << "Inisial: " << inisial << "\n";
    std::cout << "Lulus  : " << lulus << "\n";                  // dicetak 1
    std::cout << "Lulus  : " << std::boolalpha << lulus << "\n"; // dicetak true
    std::cout << "Pi (6 digit): " << 3.14159265358979 << "\n";
    std::cout << "Baris ini diakhiri endl" << std::endl;

    return 0;
}

Output yang Dihasilkan:

text
Umur   : 21 tahun
Tinggi : 172.5 cm
Inisial: B
Lulus  : 1
Lulus  : true
Pi (6 digit): 3.14159
Baris ini diakhiri endl

Baris yang layak dicermati:

  1. Baris 5-8: empat variabel dengan tipe berbeda. char ditulis 'B' (kutip tunggal), sedangkan bool hanya menerima true atau false.
  2. Baris 11 (baris Lulus : 1): tanpa manipulator apa pun, true tampil sebagai 1 — perilaku default yang sering mengejutkan.
  3. Baris 12 (Lulus : true): std::boolalpha disisipkan di tengah rantai <<, dan semua bool SETELAHnya dicetak sebagai teks. Manipulator ini sifatnya menempel (sticky): tetap aktif sampai dimatikan, jadi perhatikan posisinya di rantai.
  4. Baris 13: 3.14159265358979 terpotong menjadi 3.14159 karena batas 6 digit signifikan bawaan.
  5. Baris 14: std::endl menutup program dengan baris baru plus flush — di sini efeknya tidak terlihat mata, tetapi polanya berbeda dari "\n" pada baris sebelumnya.

Cout menyelesaikan sisi keluaran dari percakapan program dengan pengguna. Sisi masukannya menunggu di Chapter berikutnya: std::cin, cara membaca apa yang diketik pengguna di terminal, dan jebakan-jebakan pertama saat input tidak sesuai harapan.