Latest web development tutorials

C ++ overloading di funzioni e l'overloading degli operatori

C ++ permette una dellefunzioni e degli operatorinello stesso ambito per specificare più di una definizione, si chiamafunzione di sovraccarichiel'overloading degli operatori.

dichiarazione overload è uno che è stato dichiarato in questo ambito prima di una dichiarazione di funzione o metodo hanno lo stesso nome, ma il loro elenco dei parametri e definizioni (realizzazione) non sono gli stessi.

Quando si chiama unafunzione di sovraccaricoo diun operatore di overload,il compilatore attraverso il tipo di parametro che si sta utilizzando, il tipo e la definizione dei parametri vengono confrontati per determinare la scelta della definizione più appropriata. Selezionare la funzione più appropriata sovraccarico o un processo sovraccarico operatore, chiamatola risoluzione di sovraccarico.

In C ++ l'overloading di funzioni

Nello stesso ambito, è possibile dichiarare diverse funzioni funzione simile con lo stesso nome, ma questi parametri formali (il numero si riferisce al tipo di parametro o sequenziale) funzione con lo stesso nome deve essere diverso. Non si può solo ritornando ai diversi tipi di funzioni sovraccaricate.

Gli esempi che seguono, lo stesso nome della funzionedi stampa () è utilizzata per inviare diversi tipi di dati:

#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;
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

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

In C ++ sovraccarico operatore

È possibile ridefinire o sovrascrivere la maggior parte degli operatori built-in C ++. Ciò consente di utilizzare tipi personalizzati di operatori.

L'operatore è sovraccarico con particolare nome della funzione, il nome della funzione è seguito dall'operatore chiave e l'operatore per sostituire i simboli. E altre funzioni, operatori overload hanno un tipo di ritorno e lista dei parametri.

Box operator+(const Box&);

Dichiarazione del operatore di addizione per due oggetti di sicurezza vengono aggiunti, il ritorno finale degli oggetti di sicurezza. gli operatori più congestionati possono essere definiti come funzioni normali o terzi sono definiti come funzioni membro della classe. Se definiamo la funzione di cui sopra come classi di funzioni di terzi, quindi abbiamo bisogno di passare due parametri per ogni operazione, come segue:

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

L'esempio seguente dimostra il concetto overloading degli operatori funzione membro. Qui, l'oggetto passato come parametro, proprietà di un oggetto utilizzandoquesto operatore può accedere come segue:

#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;
}

Quando il codice di cui sopra è compilato ed eseguito, produce i seguenti risultati:

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

gli operatori di overload possono / non possono essere sovraccaricati operatori

Di seguito è riportato un elenco degli operatori può essere sovraccaricato:

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

Di seguito è riportato un elenco degli operatori non può essere sovraccaricato:

::.*.?:

Esempi di overloading degli operatori

Di seguito fornisce una varietà di esempi overloading degli operatori per aiutarvi a capire meglio il concetto di sovraccarico.

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