Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Mari 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 class Point yang menyimpan koordinat x dan y (keduanya int). Class-mu harus memiliki:
    • Anggota private untuk koordinat x dan y
    • Constructor yang menerima nilai x dan y
    • Getter getX() dan getY() (keduanya const)
    • Operator + yang di-overload untuk menjumlahkan dua titik dan mengembalikan Point baru dengan koordinat gabungan

    Operator + harus diimplementasikan sebagai fungsi anggota yang menerima Point lain dengan referensi const dan mengembalikan Point baru. Tandai sebagai const karena 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 object Point, 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;
}
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