Latest web development tutorials

C ++ fungsi overloading dan operator overloading

C ++ memungkinkan salah satufungsi dan operatordalam lingkup yang sama untuk menentukan lebih dari satu definisi, hal itu disebutfungsi overloadingdanoperator overloading.

Pernyataan kelebihan beban adalah salah satu yang telah dinyatakan dalam lingkup ini sebelum fungsi atau metode deklarasi memiliki nama yang sama, tetapi daftar mereka parameter dan definisi (realisasi) tidak sama.

Ketika Anda memanggilfungsi overload atau operator overloading,parameter compiler dengan jenis yang Anda gunakan, jenis dan definisi parameter dibandingkan untuk menentukan pilihan dari definisi yang paling tepat. Pilih fungsi kelebihan beban yang paling tepat atau proses overloading operator, disebutresolusi overload.

Dalam C ++ fungsi overloading

Dalam lingkup yang sama, Anda dapat mendeklarasikan beberapa fungsi fungsi yang sama dengan nama yang sama, tetapi parameter formal (nomor mengacu pada jenis parameter atau berurutan) fungsi dengan nama yang sama harus berbeda. Anda tidak bisa hanya dengan kembali ke berbagai jenis fungsi kelebihan beban.

Contoh-contoh berikut, nama yang sama dengancetak fungsi ()digunakan untuk keluaran jenis data yang berbeda:

#include <iostream>
using namespace std;
 
class printData 
{
   public:
      void print(int i) {
        cout << "Printing int: " << i << endl;
      }

      void print(double  f) {
        cout << "Printing float: " << f << endl;
      }

      void print(char* c) {
        cout << "Printing character: " << c << endl;
      }
};

int main(void)
{
   printData pd;
 
   // Call print to print integer
   pd.print(5);
   // Call print to print float
   pd.print(500.263);
   // Call print to print character
   pd.print("Hello C++");
 
   return 0;
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

Printing int: 5
Printing float: 500.263
Printing character: Hello C++

Dalam C ++ operator overloading

Anda dapat mendefinisikan ulang atau mengganti sebagian besar C ++ built-in operator. Hal ini memungkinkan Anda untuk menggunakan jenis kustom dari operator.

operator kelebihan beban dengan khusus nama fungsi, nama fungsi diikuti oleh operator kunci dan operator untuk menimpa simbol. Dan fungsi lainnya, operator kelebihan beban memiliki jenis kembali dan daftar parameter.

Box operator+(const Box&);

Pernyataan operator Selain untuk dua objek Box ditambahkan, kembali akhir dari Box benda. operator yang paling kelebihan beban dapat didefinisikan sebagai fungsi normal atau non-anggota didefinisikan sebagai fungsi anggota kelas. Jika kita mendefinisikan fungsi di atas sebagai kelas fungsi non-anggota, maka kita harus lulus dua parameter untuk setiap operasi, sebagai berikut:

Box operator+(const Box&, const Box&);

Contoh berikut menunjukkan fungsi anggota konsep operator overloading. Di sini, objek lulus sebagai parameter, sifat dari suatu objek menggunakan operator yangini diakses sebagai berikut:

#include <iostream>
using namespace std;

class Box
{
   public:

      double getVolume(void)
      {
         return length * breadth * height;
      }
      void setLength( double len )
      {
          length = len;
      }

      void setBreadth( double bre )
      {
          breadth = bre;
      }

      void setHeight( double hei )
      {
          height = hei;
      }
      // 重载 + 运算符,用于把两个 Box 对象相加
      Box operator+(const Box& b)
      {
         Box box;
         box.length = this->length + b.length;
         box.breadth = this->breadth + b.breadth;
         box.height = this->height + b.height;
         return box;
      }
   private:
      double length;      // 长度
      double breadth;     // 宽度
      double height;      // 高度
};
// 程序的主函数
int main( )
{
   Box Box1;                // 声明 Box1,类型为 Box
   Box Box2;                // 声明 Box2,类型为 Box
   Box Box3;                // 声明 Box3,类型为 Box
   double volume = 0.0;     // 把体积存储在该变量中
 
   // Box1 详述
   Box1.setLength(6.0); 
   Box1.setBreadth(7.0); 
   Box1.setHeight(5.0);
 
   // Box2 详述
   Box2.setLength(12.0); 
   Box2.setBreadth(13.0); 
   Box2.setHeight(10.0);
 
   // Box1 的体积
   volume = Box1.getVolume();
   cout << "Volume of Box1 : " << volume <<endl;
 
   // Box2 的体积
   volume = Box2.getVolume();
   cout << "Volume of Box2 : " << volume <<endl;

   // 把两个对象相加,得到 Box3
   Box3 = Box1 + Box2;

   // Box3 的体积
   volume = Box3.getVolume();
   cout << "Volume of Box3 : " << volume <<endl;

   return 0;
}

Ketika kode di atas dikompilasi dan dijalankan, menghasilkan hasil sebagai berikut:

Volume of Box1 : 210
Volume of Box2 : 1560
Volume of Box3 : 5400

operator kelebihan beban dapat / tidak dapat kelebihan beban operator

Berikut ini adalah daftar operator dapat kelebihan beban:

+-*/%^
&|~!,=
<><=>=++--
<<>>==!=&&||
+=-=/=%=^=&=
|=*=<<=>>=[]()
->->*newnew []deletedelete []

Berikut ini adalah daftar operator tidak dapat kelebihan beban:

::.*.?:

Contoh operator overloading

Berikut ini menyediakan berbagai contoh operator overloading untuk membantu Anda lebih memahami konsep overloading.

序号运算符和实例
1 一元运算符重载
2 二元运算符重载
3 关系运算符重载
4 输入/输出运算符重载
5 ++ 和 -- 运算符重载
6 赋值运算符重载
7 函数调用运算符 () 重载
8 下标运算符 [] 重载
9 类成员访问运算符 -> 重载