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 p2Tantangan
MudahMari 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 classTemperatureyang menyimpan nilai suhu (sebagaidouble) dan label satuan (sebagaichar, 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()dangetUnit()(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 Catau77.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 formatvalue unit(misalnya,25.5 C).Buat dua object
Temperaturemenggunakan operator ekstraksi untuk membacanya daristd::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 FOutputnya 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;
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Object
1Dasar-Dasar OOP
File EksternalBuild dan Kompilasi C++File Header dan File SourceNamespace dan CakupanPengantar OOP dalam C++class vs objectPointer 'this'method (Fungsi Anggota)Atribut (Anggota Data)Dasar Ctor dan DtorRingkasan: Kalkulator Sederhana4Properti class
Anggota instance vs staticGetter dan setterFungsi anggota constKata kunci mutableMethod dan variabel staticFungsi dan class friendRangkuman, Pengelola Rekening Bank7Pewarisan
Pewarisan DasarTingkat Akses pada PewarisanUrutan Pemanggilan Ctor & DtorPenimpaan methodFungsi Virtual & VTablePewarisan BergandaPewarisan VirtualRangkuman: Hierarki Karyawan2Manajemen Memori
Memori Stack vs HeapPointer dan ReferenceMemori Dinamis (new/delete)Smart Pointer di C++RAII di C++Rangkuman: Pengelola Array Dinamis5Enkapsulasi
Penentu Akses dalam C++Penentu Akses secara MendalamPenyembunyian Informasistruct vs classNested dan Inner classRangkuman, Sistem Catatan Siswa8Polimorfisme
Polimorfisme saat Compile vs RuntimeOverloading FungsiMeninjau Kembali Fungsi VirtualFungsi Virtual MurniKelas AbstrakDesain Interface di C++Casting Dinamis & RTTIRangkuman: Kalkulator Bentuk3Konstruktor & Destruktor
Konstruktor DefaultKonstruktor BerparameterKonstruktor SalinKonstruktor PindahDaftar Inisialisasi KonstruktorKonstruktor DelegasiKupas Tuntas DestruktorAturan Tiga, Lima, dan NolRangkuman: class String6Overloading Operator
Pengantar Overloading OperatorOverloading Operator AritmetikaOverloading Operator PerbandinganOperator StreamOverloading Operator PenugasanOverloading Operator [] dan ()Operator Konversi TipeRingkasan, class Matrix9Template
Template FungsiTemplate classSpesialisasi TemplateTemplate VariadikDasar SFINAE & Type TraitsRangkuman, Container GenerikLatihan sendiri: Compiler C++ online