Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

Overload Operator C++

Operator C++ Kelebihan Beban

Dalam tutorial ini, kita akan belajar tentang overloading operator dengan bantuan contoh.

Dalam C++, kita dapat mengubah cara kerja operator untuk tipe yang ditentukan pengguna seperti objek dan struktur. Ini dikenal sebagai kelebihan operator . Misalnya,

Misalkan kita telah membuat tiga objek c1 , c2 dan hasil dari kelas bernama Complex yang mewakili bilangan kompleks.

Karena kelebihan beban operator memungkinkan kita mengubah cara kerja operator, kita dapat mendefinisikan ulang cara + operator bekerja dan menggunakannya untuk menambahkan bilangan kompleks c1 dan c2 dengan menulis kode berikut:

result = c1 + c2;

bukannya sesuatu seperti

result = c1.addNumbers(c2);

Ini membuat kode kita intuitif dan mudah dimengerti.

Catatan: Kami tidak dapat menggunakan kelebihan operator untuk tipe data dasar seperti int , float , char dan seterusnya.


Sintaks untuk Kelebihan Operator C++

Untuk membebani operator, kami menggunakan operator khusus fungsi. Kita mendefinisikan fungsi di dalam kelas atau struktur yang objek/variabelnya kita inginkan untuk digunakan oleh operator yang kelebihan beban.

class className {
    ... .. ...
    public
       returnType operator symbol (arguments) {
           ... .. ...
       } 
    ... .. ...
};

Di sini,


Operator Overloading di Operator Unary

Operator unary hanya beroperasi pada satu operand. Operator kenaikan ++ dan operator penurunan -- adalah contoh dari operator unary.


Contoh1:++ Operator (Operator Unary) Kelebihan Beban

// Overload ++ when used as prefix

#include <iostream>
using namespace std;

class Count {
   private:
    int value;

   public:

    // Constructor to initialize count to 5
    Count() : value(5) {}

    // Overload ++ when used as prefix
    void operator ++ () {
        ++value;
    }

    void display() {
        cout << "Count: " << value << endl;
    }
};

int main() {
    Count count1;

    // Call the "void operator ++ ()" function
    ++count1;

    count1.display();
    return 0;
}

Keluaran

Count: 6

Di sini, ketika kita menggunakan ++count1; , void operator ++ () disebut. Ini meningkatkan nilai atribut untuk objek count1 oleh 1.

Catatan: Ketika kita membebani operator, kita dapat menggunakannya untuk bekerja dengan cara apa pun yang kita suka. Misalnya, kita bisa menggunakan ++ untuk meningkatkan nilai dengan 100.

Namun, ini membuat kode kita membingungkan dan sulit dipahami. Adalah tugas kita sebagai programmer untuk menggunakan operator overloading dengan benar dan dengan cara yang konsisten dan intuitif.


Contoh di atas hanya berfungsi jika ++ digunakan sebagai awalan. Untuk membuat ++ bekerja sebagai postfix kami menggunakan sintaks ini.

void operator ++ (int) {
    // code
}

Perhatikan int di dalam tanda kurung. Ini adalah sintaks yang digunakan untuk menggunakan operator unary sebagai postfix; itu bukan parameter fungsi.


Contoh 2:Operator ++ (Operator Unary) Kelebihan Beban

// Overload ++ when used as prefix and postfix

#include <iostream>
using namespace std;

class Count {
   private:
    int value;

   public:

    // Constructor to initialize count to 5
    Count() : value(5) {}


    // Overload ++ when used as prefix
    void operator ++ () {
        ++value;
    }


    // Overload ++ when used as postfix
    void operator ++ (int) {
        value++;
    }

    void display() {
        cout << "Count: " << value << endl;
    }
};

int main() {
    Count count1;

    // Call the "void operator ++ (int)" function
    count1++;
    count1.display();

    // Call the "void operator ++ ()" function
    ++count1;

    count1.display();
    return 0;
}

Keluaran

Count: 6
Count: 7

Contoh 2 bekerja ketika ++ digunakan sebagai prefiks dan postfiks. Namun, itu tidak akan berhasil jika kita mencoba melakukan sesuatu seperti ini:

Count count1, result;

// Error
result = ++count1;

Ini karena tipe kembalian dari fungsi operator kita adalah void . Kita bisa menyelesaikan masalah ini dengan membuat Count sebagai tipe kembalinya fungsi operator.

// return Count when ++ used as prefix

Count operator ++ () {
    // code
}

// return Count when ++ used as postfix

Count operator ++ (int) {
   // code
}

Contoh 3:Mengembalikan Nilai dari Fungsi Operator (++ Operator)

#include <iostream>
using namespace std;

class Count {
   private:
    int value;

   public
       :
    // Constructor to initialize count to 5
    Count() : value(5) {}

    // Overload ++ when used as prefix
    Count operator ++ () {
        Count temp;

        // Here, value is the value attribute of the calling object
        temp.value = ++value;

        return temp;
    }

    // Overload ++ when used as postfix
    Count operator ++ (int) {
        Count temp;

        // Here, value is the value attribute of the calling object
        temp.value = value++;

        return temp;
    }

    void display() {
        cout << "Count: " << value << endl;
    }
};

int main() {
    Count count1, result;

    // Call the "Count operator ++ ()" function
    result = ++count1;
    result.display();

    // Call the "Count operator ++ (int)" function
    result = count1++;
    result.display();

    return 0;
}

Keluaran

Count: 6
Count: 6

Di sini, kami telah menggunakan kode berikut untuk overloading operator awalan:

// Overload ++ when used as prefix
Count operator ++ () {
    Count temp;

    // Here, value is the value attribute of the calling object
    temp.value = ++value;

    return temp;
}

Kode untuk overloading operator postfix juga serupa. Perhatikan bahwa kita telah membuat objek temp dan mengembalikan nilainya ke fungsi operator.

Perhatikan juga kodenya

temp.value = ++value; 

Variabel nilai milik count1 objek di main() karena count1 memanggil fungsi, sementara temp.value milik temp objek.


Operator Overloading di Operator Biner

Operator biner bekerja pada dua operan. Misalnya,

result = num + 9;

Di sini, + adalah operator biner yang bekerja pada operan num dan 9 .

Saat kita membebani operator biner untuk tipe yang ditentukan pengguna dengan menggunakan kode:

obj3 = obj1 + obj2;

Fungsi operator dipanggil menggunakan obj1 objek dan obj2 diteruskan sebagai argumen ke fungsi.


Contoh 4:Overload Operator Biner C++

// C++ program to overload the binary operator +
// This program adds two complex numbers

#include <iostream>
using namespace std;

class Complex {
   private:
    float real;
    float imag;

   public:
    // Constructor to initialize real and imag to 0
    Complex() : real(0), imag(0) {}

    void input() {
        cout << "Enter real and imaginary parts respectively: ";
        cin >> real;
        cin >> imag;
    }

    // Overload the + operator
    Complex operator + (const Complex& obj) {
        Complex temp;
        temp.real = real + obj.real;
        temp.imag = imag + obj.imag;
        return temp;
    }

    void output() {
        if (imag < 0)
            cout << "Output Complex number: " << real << imag << "i";
        else
            cout << "Output Complex number: " << real << "+" << imag << "i";
    }
};

int main() {
    Complex complex1, complex2, result;

    cout << "Enter first complex number:\n";
    complex1.input();

    cout << "Enter second complex number:\n";
    complex2.input();

   // complex1 calls the operator function
   // complex2 is passed as an argument to the function
    result = complex1 + complex2;
    result.output();

    return 0;
}

Keluaran

Enter first complex number:
Enter real and imaginary parts respectively: 9 5
Enter second complex number:
Enter real and imaginary parts respectively: 7 6
Output Complex number: 16+11i

Dalam program ini, fungsi operatornya adalah:

Complex operator + (const Complex& obj) {
    // code
}

Alih-alih ini, kita juga bisa menulis fungsi ini seperti:

Complex operator + (Complex obj) {
    // code
}

Namun,


Hal-hal yang Perlu Diingat dalam Overload Operator C++

  1. Dua operator = dan & sudah kelebihan beban secara default di C++. Misalnya, untuk menyalin objek dari kelas yang sama, kita bisa langsung menggunakan = operator. Kita tidak perlu membuat fungsi operator.
  2. Operator overloading tidak dapat mengubah prioritas dan asosiasi operator. Namun, jika kita ingin mengubah urutan evaluasi, tanda kurung harus digunakan.
  3. Ada 4 operator yang tidak bisa di-overload di C++. Mereka:
    1. :: (resolusi cakupan)
    2. . (pemilihan anggota)
    3. .* (pemilihan anggota melalui penunjuk ke fungsi)
    4. ?: (operator ternary)

Kunjungi halaman ini untuk mempelajari lebih lanjut tentang:

  • Bagaimana cara membebani operator increment dengan benar?
  • Bagaimana cara membebani operator biner - untuk mengurangi bilangan kompleks?

Bahasa C

  1. C# Operator
  2. C# ternary (? :) Operator
  3. Metode C# Overloading
  4. C# Konstruktor Overloading
  5. Operator C++
  6. Komentar C++
  7. Template Kelas C++
  8. Kelebihan Operator Python
  9. Operator di C++ dengan Contoh:Apa itu, Jenis dan Program
  10. Operator C++ Overloading dengan Contoh