Bagikan melalui


Aturan Umum untuk Kelebihan Beban Operator

Aturan berikut membatasi bagaimana operator yang kelebihan beban diterapkan. Namun, mereka tidak berlaku untuk operator baru dan hapus , yang dicakup secara terpisah.

  • Anda tidak dapat menentukan operator baru, seperti ..

  • Anda tidak dapat menentukan ulang arti operator saat diterapkan ke jenis data bawaan.

  • Operator yang kelebihan beban harus menjadi fungsi anggota kelas nonstatis atau fungsi global. Fungsi global yang membutuhkan akses ke anggota kelas privat atau terlindungi harus dideklarasikan sebagai teman kelas tersebut. Fungsi global harus mengambil setidaknya satu argumen yang merupakan kelas atau jenis enumerasi atau yang merupakan referensi ke kelas atau jenis enumerasi. Misalnya:

    // rules_for_operator_overloading.cpp
    class Point
    {
    public:
        Point operator<( Point & );  // Declare a member operator
                                     //  overload.
        // Declare addition operators.
        friend Point operator+( Point&, int );
        friend Point operator+( int, Point& );
    };
    
    int main()
    {
    }
    

    Sampel kode sebelumnya mendeklarasikan operator kurang dari sebagai fungsi anggota; namun, operator penambahan dinyatakan sebagai fungsi global yang memiliki akses teman. Perhatikan bahwa lebih dari satu implementasi dapat disediakan untuk operator tertentu. Dalam kasus operator penambahan sebelumnya, kedua implementasi disediakan untuk memfasilitasi komutativitas. Sama seperti kemungkinan operator yang menambahkan Point ke , int ke PointPoint, dan sebagainya, mungkin diimplementasikan.

  • Operator mematuhi prioritas, pengelompokan, dan jumlah operand yang ditentukan oleh penggunaan umumnya dengan jenis bawaan. Oleh karena itu, tidak ada cara untuk mengekspresikan konsep "tambahkan 2 dan 3 ke objek jenis Point," mengharapkan 2 ditambahkan ke koordinat x dan 3 untuk ditambahkan ke koordinat y .

  • Operator unary yang dinyatakan sebagai fungsi anggota tidak mengambil argumen; jika dinyatakan sebagai fungsi global, mereka mengambil satu argumen.

  • Operator biner yang dinyatakan sebagai fungsi anggota mengambil satu argumen; jika dinyatakan sebagai fungsi global, mereka mengambil dua argumen.

  • Jika operator dapat digunakan sebagai operator unary atau biner (&, *, +, dan -), Anda dapat membebani setiap penggunaan secara terpisah.

  • Operator yang kelebihan beban tidak boleh memiliki argumen default.

  • Semua operator yang kelebihan beban kecuali penugasan (operator=) diwarisi oleh kelas turunan.

  • Argumen pertama untuk operator kelebihan beban fungsi anggota selalu dari jenis kelas objek tempat operator dipanggil (kelas tempat operator dideklarasikan, atau kelas yang berasal dari kelas tersebut). Tidak ada konversi yang disediakan untuk argumen pertama.

Perhatikan bahwa arti salah satu operator dapat diubah sepenuhnya. Itu termasuk arti operator alamat (&), penugasan (=), dan panggilan fungsi. Selain itu, identitas yang dapat diandalkan untuk jenis bawaan dapat diubah menggunakan kelebihan beban operator. Misalnya, empat pernyataan berikut biasanya setara ketika dievaluasi sepenuhnya:

var = var + 1;
var += 1;
var++;
++var;

Identitas ini tidak dapat diandalkan untuk jenis kelas yang kelebihan beban operator. Selain itu, beberapa persyaratan implisit dalam penggunaan operator ini untuk jenis dasar dilonggarkan untuk operator yang kelebihan beban. Misalnya, operator penambahan/penugasan, +=, mengharuskan operand kiri menjadi nilai l saat diterapkan ke jenis dasar; tidak ada persyaratan seperti itu ketika operator kelebihan beban.

Catatan

Untuk konsistensi, seringkali yang terbaik adalah mengikuti model jenis bawaan saat menentukan operator yang kelebihan beban. Jika semantik operator yang kelebihan beban berbeda secara signifikan dari maknanya dalam konteks lain, itu bisa lebih membingungkan daripada yang berguna.

Baca juga

Kelebihan Beban Operator