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:
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.
| Aspek | std::endl | "\n" |
|---|---|---|
| Menulis baris baru | Ya | Ya |
| Memaksa flush buffer | Ya, setiap dipakai | Tidak |
| Efek saat dipakai banyak | Kompilasi jadi lebih lambat, output lebih lambat | Buffer bekerja efisien |
| Cocok untuk | Titik yang memang butuh keluaran segera | Kebutuhan 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:21tampil sebagai21. - Boolean (
bool) secara default dicetak sebagai angka:truemenjadi1danfalsemenjadi0. Memasangstd::boolalphamengubahnya menjadi tekstrue/false. - Bilangan pecahan (
double) dicetak sampai 6 digit signifikan secara default:3.14159265358979tampil sebagai3.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:
#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:
Umur : 21 tahun
Tinggi : 172.5 cm
Inisial: B
Lulus : 1
Lulus : true
Pi (6 digit): 3.14159
Baris ini diakhiri endlBaris yang layak dicermati:
- Baris 5-8: empat variabel dengan tipe berbeda.
charditulis'B'(kutip tunggal), sedangkanboolhanya menerimatrueataufalse. - Baris 11 (baris
Lulus : 1): tanpa manipulator apa pun,truetampil sebagai1— perilaku default yang sering mengejutkan. - Baris 12 (
Lulus : true):std::boolalphadisisipkan di tengah rantai<<, dan semuaboolSETELAHnya dicetak sebagai teks. Manipulator ini sifatnya menempel (sticky): tetap aktif sampai dimatikan, jadi perhatikan posisinya di rantai. - Baris 13:
3.14159265358979terpotong menjadi3.14159karena batas 6 digit signifikan bawaan. - Baris 14:
std::endlmenutup 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.