Pengantar Overloading Operator
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 40 dari 104.
Operator overloading memungkinkan kamu menentukan perilaku operator seperti +, -, atau == saat digunakan dengan class buatanmu sendiri. Daripada 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 membebani operator, kamu mendefinisikan fungsi menggunakan kata kunci operator yang diikuti simbolnya:
class Vector2D {
double x, y;
public:
Vector2D(double x, double y) : x(x), y(y) {}
// Beri operator + perilaku tambahan
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 di-overload. Operator resolusi lingkup ::, akses anggota ., ternary ?:, dan sizeof tidak dapat di-overload. 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 nonanggota. Dalam pelajaran berikutnya, kamu akan belajar kapan harus menggunakan setiap pendekatan dan cara melakukan overload pada kategori operator tertentu.
Tantangan
MudahMari buat class Point yang merepresentasikan koordinat 2D dan mendukung penjumlahan dua titik menggunakan operator +. Ini langkah pertamamu 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 (keduanya bertipeint). Class-mu harus memiliki:- Member privat 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 hasil penjumlahan
Operator
+harus diimplementasikan sebagai fungsi member yang menerimaPointlain sebagai referensi const dan mengembalikanPointbaru. Tandai denganconstkarena operator ini tidak mengubah kedua operand.main.cpp: Baca empat bilangan bulat dari input (x1, y1, x2, y2 pada baris terpisah) yang mewakili 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 output hasilnya 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