Pengantar Overloading Operator
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 40 dari 104.
Operator overloading memungkinkan kamu menentukan cara kerja operator seperti +, -, atau == saat digunakan dengan class buatanmu sendiri. Alih-alih memanggil method seperti a.add(b), kamu bisa menulis a + b yang lebih intuitif.
Di C++, operator pada dasarnya adalah fungsi dengan nama khusus. Untuk melakukan overload pada operator, kamu mendefinisikan fungsi menggunakan kata kunci operator yang diikuti simbol:
class Vector2D {
double x, y;
public:
Vector2D(double x, double y) : x(x), y(y) {}
// Definisikan ulang operator +
Vector2D operator+(const Vector2D& other) const {
return Vector2D(x + other.x, y + other.y);
}
};Sekarang kamu bisa menjumlahkan dua vektor secara alami:
Vector2D v1(1.0, 2.0);
Vector2D v2(3.0, 4.0);
Vector2D v3 = v1 + v2; // Memanggil v1.operator+(v2)Tidak semua operator dapat dioverload. Operator resolusi cakupan ::, akses member ., operator ternary ?:, dan sizeof tidak dapat dioverload. Selain itu, kamu tidak dapat membuat operator baru atau mengubah prioritas operator, * akan selalu dievaluasi sebelum +.
Operator dapat diimplementasikan sebagai fungsi anggota (seperti di atas) atau sebagai fungsi non-anggota. Dalam pelajaran berikutnya, kamu akan belajar kapan menggunakan masing-masing pendekatan dan cara melakukan overload pada kategori operator tertentu.
Tantangan
MudahMari kita buat class Point yang merepresentasikan koordinat 2D dan mendukung penjumlahan dua titik menggunakan operator +. Ini langkah pertamamu untuk mempelajari operator overloading, yang memungkinkan class kustommu bekerja dengan operator yang sudah dikenal.
Kamu akan membuat dua file untuk mengatur kodemu:
Point.h: Definisikan classPointyang menyimpan koordinat x dan y (keduanyaint). Class-mu harus memiliki:- Anggota private untuk koordinat x dan y
- Constructor yang menerima nilai x dan y
- Getter
getX()dangetY()(keduanya const) - Operator
+yang di-overload untuk menjumlahkan dua titik dan mengembalikanPointbaru dengan koordinat gabungan
Operator
+harus diimplementasikan sebagai fungsi anggota yang menerimaPointlain dengan referensi const dan mengembalikanPointbaru. Tandai sebagaiconstkarena operator ini tidak mengubah kedua operand.main.cpp: Baca empat bilangan bulat dari input (x1, y1, x2, y2 pada baris terpisah) yang merepresentasikan dua titik. Buat dua objectPoint, jumlahkan keduanya menggunakan operator+, lalu tampilkan hasilnya.Format output:
Point 1: (<x1>, <y1>) Point 2: (<x2>, <y2>) Sum: (<sum_x>, <sum_y>)
Inti pentingnya adalah p1 + p2 sebenarnya memanggil p1.operator+(p2) di balik layar. Operator yang kamu overload memungkinkanmu menulis kode yang intuitif seperti Point p3 = p1 + p2;, bukan sesuatu seperti Point p3 = p1.add(p2);.
Ubah string input menjadi bilangan bulat menggunakan std::stoi(). Jangan lupa menambahkan header guard di file header-mu.
Coba sendiri
#include <iostream>
#include <string>
#include "Point.h"
using namespace std;
int main() {
// Baca input
string line1, line2, line3, line4;
getline(cin, line1);
getline(cin, line2);
getline(cin, line3);
getline(cin, line4);
int x1 = stoi(line1);
int y1 = stoi(line2);
int x2 = stoi(line3);
int y2 = stoi(line4);
// TODO: Buat dua object Point menggunakan nilai input
// TODO: Jumlahkan kedua titik menggunakan operator +
// TODO: Tampilkan hasil dalam format yang diminta:
// Point 1: (<x1>, <y1>)
// Point 2: (<x2>, <y2>)
// Sum: (<sum_x>, <sum_y>)
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