Menu
CoddyTech

Overloading Operator

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C# di Coddy. Pelajaran 36 dari 70.

Operator overloading memungkinkan kamu menentukan cara kerja operator seperti +, -, atau == dengan class kustommu. Daripada memanggil method seperti point1.Add(point2), kamu bisa menulis bentuk yang lebih alami, point1 + point2.

Untuk melakukan overload pada operator, kamu membuat method statis khusus menggunakan kata kunci operator:

public class Vector
{
    public int X { get; }
    public int Y { get; }
    
    public Vector(int x, int y)
    {
        X = x;
        Y = y;
    }
    
    public static Vector operator +(Vector a, Vector b)
    {
        return new Vector(a.X + b.X, a.Y + b.Y);
    }
}

Sekarang kamu bisa menjumlahkan vektor secara alami:

Vector v1 = new Vector(3, 4);
Vector v2 = new Vector(1, 2);
Vector v3 = v1 + v2;  // X = 4, Y = 6

Method harus berupa public static, dan setidaknya satu parameter harus bertipe yang memuatnya. Kamu dapat melakukan overload pada operator aritmetika (+, -, *, /), operator perbandingan (==, !=, <, >), dan operator unary (-, !, ++).

Perhatikan bahwa operator perbandingan harus di-overload secara berpasangan. Jika kamu mendefinisikan ==, kamu juga harus mendefinisikan !=.

Gunakan operator overloading saat membuat kodemu lebih intuitif, terutama untuk tipe matematika seperti vektor, bilangan kompleks, atau uang. Hindari penggunaannya saat makna operasinya tidak langsung jelas.

challenge icon

Tantangan

Mudah

Mari buat Fraction class agar penggunaan pecahan terasa alami melalui operator overloading. Alih-alih memanggil method seperti fraction1.Add(fraction2), kamu bisa menulis fraction1 + fraction2 yang lebih intuitif.

Kamu akan mengatur kodemu dalam dua file:

  • Fraction.cs: Buat Fraction class di namespace Math yang merepresentasikan pecahan dengan pembilang dan penyebut. Pecahanmu harus memiliki:
    • Dua property bilangan bulat hanya-baca: Numerator dan Denominator
    • Constructor yang menerima pembilang dan penyebut (dalam urutan tersebut)
    • Operator + yang di-overload untuk menjumlahkan dua pecahan menggunakan rumus: (a/b) + (c/d) = (a*d + c*b) / (b*d)
    • Operator * yang di-overload untuk mengalikan dua pecahan: (a/b) * (c/d) = (a*c) / (b*d)
    • Operator == yang di-overload dan mengembalikan true jika dua pecahan sama (kalikan silang untuk membandingkan: a*d == c*b)
    • Operator != yang di-overload (wajib saat kamu meng-overload ==) dan mengembalikan kebalikan dari ==
    • Method GetDisplay() yang mengembalikan pecahan sebagai string dengan format "{Numerator}/{Denominator}"
  • Program.cs: Di file utama, buat dua pecahan menggunakan nilai input. Tunjukkan operator yang di-overload dengan menjumlahkan dan mengalikannya, serta memeriksa apakah keduanya sama. Cetak hasilnya untuk menunjukkan bahwa operator-operator tersebut bekerja secara alami.

Kamu akan menerima empat input:

  • Pembilang pecahan pertama (bilangan bulat)
  • Penyebut pecahan pertama (bilangan bulat)
  • Pembilang pecahan kedua (bilangan bulat)
  • Penyebut pecahan kedua (bilangan bulat)

Cetak output dengan format ini:

Fraction 1: {GetDisplay()}
Fraction 2: {GetDisplay()}
Sum: {GetDisplay()}
Product: {GetDisplay()}
Are equal: {True/False}

Misalnya, jika inputnya adalah 1, 2, 2, dan 4, outputnya akan seperti ini:

Fraction 1: 1/2
Fraction 2: 2/4
Sum: 8/8
Product: 2/8
Are equal: True

Perhatikan bahwa 1/2 dan 2/4 dikenali sebagai nilai yang sama karena 1*4 == 2*2. Jumlah dan hasil kalinya dihitung tanpa penyederhanaan, itu tidak masalah untuk tantangan ini. Keunggulannya adalah kamu kini bisa menggunakan operator yang familier untuk mengolah pecahan dengan cara yang alami!

Coba sendiri

using System;
using Math;

class Program
{
    public static void Main(string[] args)
    {
        // Baca input untuk pecahan pertama
        int num1 = Convert.ToInt32(Console.ReadLine());
        int den1 = Convert.ToInt32(Console.ReadLine());
        
        // Baca input untuk pecahan kedua
        int num2 = Convert.ToInt32(Console.ReadLine());
        int den2 = Convert.ToInt32(Console.ReadLine());
        
        // TODO: Buat dua object Fraction menggunakan nilai input
        
        // TODO: Gunakan operator + yang telah di-overload untuk menjumlahkan pecahan
        
        // TODO: Gunakan operator * yang telah di-overload untuk mengalikan pecahan
        
        // TODO: Gunakan operator == yang telah di-overload untuk memeriksa kesamaan
        
        // TODO: Cetak output dalam format yang diminta:
        // Pecahan 1: {GetDisplay()}
        // Pecahan 2: {GetDisplay()}
        // Jumlah: {GetDisplay()}
        // Hasil kali: {GetDisplay()}
        // Apakah sama: {True/False}
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C# online