Menu
CoddyTech

Overloading Operator Aritmetika

Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 41 dari 104.

Operator aritmetika seperti +, -, *, dan / biasanya di-overload agar class kustom berperilaku seperti tipe numerik bawaan. Operator ini biasanya mengembalikan object baru, bukan mengubah operand.

Berikut adalah class Fraction dengan operator aritmetika:

class Fraction {
    int numerator, denominator;
    
public:
    Fraction(int n, int d) : numerator(n), denominator(d) {}
    
    Fraction operator+(const Fraction& other) const {
        return Fraction(
            numerator * other.denominator + other.numerator * denominator,
            denominator * other.denominator
        );
    }
    
    Fraction operator*(const Fraction& other) const {
        return Fraction(numerator * other.numerator, 
                        denominator * other.denominator);
    }
};

Perhatikan bahwa kedua operator ditandai sebagai const karena tidak mengubah kedua operand. Keduanya membuat dan mengembalikan Fraction baru yang berisi hasilnya.

Untuk operator penugasan gabungan seperti +=, polanya berbeda. Operator ini mengubah operand kiri dan mengembalikan referensi ke operand tersebut:

Fraction& operator+=(const Fraction& other) {
    numerator = numerator * other.denominator + other.numerator * denominator;
    denominator = denominator * other.denominator;
    return *this;
}

Praktik yang umum adalah mengimplementasikan operator dasar menggunakan penugasan gabungan, sehingga mengurangi duplikasi kode:

Fraction operator+(const Fraction& other) const {
    Fraction result = *this;    // Salin object ini
    result += other;            // Gunakan penugasan gabungan
    return result;
}

Pendekatan ini memastikan kedua operator tetap konsisten dan memudahkan pemeliharaan.

challenge icon

Tantangan

Mudah

Mari buat class Money yang menangani perhitungan mata uang menggunakan overloading operator aritmetika. Kamu akan mengimplementasikan beberapa operator aritmetika yang memungkinkanmu mengolah nilai uang senatural saat mengolah angka biasa.

Kamu akan membuat dua file untuk mengatur kodemu:

  • Money.h: Definisikan class Money yang menyimpan jumlah dalam sen (sebagai int) untuk menghindari masalah presisi floating-point. Class-mu harus mendukung:
    • Konstruktor yang menerima dolar dan sen sebagai bilangan bulat terpisah
    • Getter getDollars() yang mengembalikan bagian dolar
    • Getter getCents() yang mengembalikan bagian sen (0-99)
    • Operator + dan - yang di-overload dan mengembalikan object Money baru
    • Operator penugasan gabungan += dan -= yang di-overload, mengubah object saat ini, lalu mengembalikan referensi ke object tersebut
    • Method display() yang mencetak uang dalam format $X.YY (selalu dua digit untuk sen)

    Implementasikan operator dasar (+ dan -) menggunakan operator penugasan gabungan untuk mengurangi duplikasi kode, seperti yang ditunjukkan dalam pelajaran. Tandai semua operator aritmetika dengan const jika sesuai.

  • main.cpp: Baca empat bilangan bulat dari input yang mewakili dua jumlah uang (dollars1, cents1, dollars2, cents2 pada baris terpisah). Buat dua object Money, lalu tunjukkan penggunaan semua operator:
    • Cetak "Amount 1: " diikuti jumlah pertama yang ditampilkan
    • Cetak "Amount 2: " diikuti jumlah kedua yang ditampilkan
    • Jumlahkan kedua nilai tersebut dan cetak "Sum: " diikuti hasilnya
    • Kurangi jumlah kedua dari jumlah pertama dan cetak "Difference: " diikuti hasilnya
    • Gunakan += untuk menambahkan jumlah kedua ke jumlah pertama, lalu cetak "After +=: " diikuti jumlah pertama yang sudah diubah

Untuk method display(), gunakan std::setw(2) dan std::setfill('0') dari <iomanip> untuk memastikan sen selalu ditampilkan dengan dua digit (misalnya, $5.07, bukan $5.7).

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 "Money.h"

using namespace std;

int main() {
    // Baca input untuk dua jumlah uang
    string line;
    
    getline(cin, line);
    int dollars1 = stoi(line);
    
    getline(cin, line);
    int cents1 = stoi(line);
    
    getline(cin, line);
    int dollars2 = stoi(line);
    
    getline(cin, line);
    int cents2 = stoi(line);
    
    // TODO: Buat dua object Money dengan nilai input
    
    // TODO: Tampilkan "Amount 1: " diikuti jumlah uang pertama
    
    // TODO: Tampilkan "Amount 2: " diikuti jumlah uang kedua
    
    // TODO: Jumlahkan kedua jumlah uang, lalu tampilkan "Sum: " diikuti hasilnya
    
    // TODO: Kurangi jumlah uang pertama dengan jumlah uang kedua, lalu tampilkan "Difference: " diikuti hasilnya
    
    // TODO: Gunakan += untuk menambahkan jumlah uang kedua ke jumlah uang pertama, lalu tampilkan "After +=: " diikuti jumlah uang pertama yang telah berubah
    
    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