Menu
CoddyTech

Operator Stream

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 43 dari 104.

Operator penyisipan stream (<<) dan ekstraksi (>>) memungkinkan kamu menggunakan class kustommu dengan std::cout dan std::cin. Tidak seperti operator yang telah kita bahas sejauh ini, operator ini harus diimplementasikan sebagai fungsi non-member karena operand di sebelah kiri adalah stream, bukan class-mu.

class Point {
    int x, y;
    
public:
    Point(int x, int y) : x(x), y(y) {}
    
    // Deklarasikan sebagai friend agar bisa mengakses anggota privat
    friend std::ostream& operator<<(std::ostream& os, const Point& p);
    friend std::istream& operator>>(std::istream& is, Point& p);
};

std::ostream& operator<<(std::ostream& os, const Point& p) {
    os << "(" << p.x << ", " << p.y << ")";
    return os;
}

std::istream& operator>>(std::istream& is, Point& p) {
    is >> p.x >> p.y;
    return is;
}

Kedua operator mengembalikan referensi ke stream, sehingga memungkinkan perangkaian seperti std::cout << p1 << p2. Operator penyisipan menerima object melalui referensi const karena hanya membaca data, sedangkan operator ekstraksi menerima referensi non-const karena mengubah object.

Sekarang kamu dapat menggunakan Point secara alami dengan stream:

Point p(3, 4);
std::cout << "Location: " << p << std::endl;    // output: Location: (3, 4)

Point p2(0, 0);
std::cin >> p2;    // Baca dua bilangan bulat ke p2
challenge icon

Tantangan

Mudah

Mari buat class Temperature yang dapat digunakan dengan lancar bersama std::cout dan std::cin melalui overloading operator stream. Ini adalah skenario praktis saat kamu ingin menampilkan suhu dalam format yang mudah dibaca dan membacanya secara alami dari input.

Kamu akan membuat dua file untuk mengatur kodemu:

  • Temperature.h: Definisikan class Temperature yang menyimpan nilai suhu (sebagai double) dan label satuan (sebagai char, bisa berupa 'C' untuk Celsius atau 'F' untuk Fahrenheit). Class-mu harus memiliki:
    • Member privat untuk nilai suhu dan satuan
    • Konstruktor default yang menginisialisasi nilai ke 0.0 Celsius
    • Konstruktor berparameter yang menerima nilai dan satuan
    • Getter getValue() dan getUnit() (keduanya const)
    • Deklarasi friend untuk operator penyisipan (<<) dan ekstraksi (>>) stream

    Implementasikan operator stream sebagai fungsi non-member:

    • Operator penyisipan harus menampilkan suhu dalam format VALUE UNIT (misalnya, 25.5 C atau 77.9 F). Gunakan satu angka di belakang koma untuk nilainya.
    • Operator ekstraksi harus membaca nilai dan karakter satuan dari stream, lalu menyimpannya di object Temperature.

    Kedua operator harus mengembalikan referensi ke stream agar dapat dirangkai.

  • main.cpp: Baca dua suhu dari input. Setiap suhu diberikan pada baris terpisah dalam format value unit (misalnya, 25.5 C).

    Buat dua object Temperature menggunakan operator ekstraksi untuk membacanya dari std::cin. Lalu tampilkan keduanya menggunakan operator penyisipan dalam format berikut:

    Temperature 1: <temp1>
    Temperature 2: <temp2>

    Misalnya, jika inputnya adalah:

    25.5 C
    98.6 F

    Outputnya seharusnya:

    Temperature 1: 25.5 C
    Temperature 2: 98.6 F

Gunakan std::fixed dan std::setprecision(1) dari <iomanip> untuk memformat nilai suhu dengan tepat satu angka di belakang koma. Jangan lupa menyertakan header guard di file header-mu.

Coba sendiri

#include <iostream>
#include "Temperature.h"

int main() {
    // TODO: Buat dua object Temperature
    
    // TODO: Gunakan operator ekstraksi (>>) untuk membaca dua suhu dari std::cin
    
    // TODO: Tampilkan suhu menggunakan operator penyisipan (<<)
    // Format:
    // Temperature 1: <temp1>
    // Temperature 2: <temp2>
    
    return 0;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Object

Latihan sendiri: Compiler C++ online