Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Mari 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 class Point yang menyimpan koordinat x dan y (keduanya bertipe int). Class-mu harus memiliki:
    • Member privat 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 hasil penjumlahan

    Operator + harus diimplementasikan sebagai fungsi member yang menerima Point lain sebagai referensi const dan mengembalikan Point baru. Tandai dengan const karena 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 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 output hasilnya 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