Latest web development tutorials

C ++ Funktion Überlastung und Überladen von Operatoren

C ++ ermöglicht eine derFunktionen und Operatorenim gleichen Umfang mehr als eine Definition zu geben, esFunktionaufgerufen wirdÜberlastungundÜberladenvonOperatoren.

Überladene Aussage ist eine, die in diesem Bereich erklärt wurde, bevor eine Funktion oder Methode Erklärungen den gleichen Namen haben, aber ihre Liste der Parameter und Definitionen (Ausführung) sind nicht das gleiche.

Wenn Sie eineüberladene Funktion oder ein überladener Operator rufen,der Compiler durch den Parametertyp Sie verwenden, sind die Art und die Definition von Parametern verglichen , um die Wahl der am besten geeignete Definition zu bestimmen. Wählen Sie die am besten geeigneten überladene Funktion oder Betreiber Überlastung Prozess, die so genannteÜberladungsauflösung.

In C ++ Funktion Überlastung

Im gleichen Umfang können Sie mehrere Funktionen ähnlich der Funktion des gleichen Namens zu erklären, aber diese formalen Parameter (mittlere Anzahl der Parameter, Typ oder nacheinander) Funktion mit dem gleichen Namen verschieden sein. Sie können nicht nur von den verschiedenen Arten von überladenen Funktionen zurück.

Die folgenden Beispiele werden die gleichen Namen wie die Funktionprint () zur Ausgabe von verschiedenen Datentypen verwendet:

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

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

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

In C ++ Operatorüberladung

Sie können die meisten der C ++ integrierten Operatoren neu definieren oder außer Kraft setzen. Auf diese Weise können Sie benutzerdefinierte Typen von Operatoren zu verwenden.

Der Betreiber ist überlastet mit speziellen Funktionsname ist der Name der Funktion durch den Key-Operator und dem Betreiber gefolgt, die Symbole außer Kraft zu setzen. Und andere Funktionen überladene Operatoren haben einen Rückgabetyp und Parameterliste.

Box operator+(const Box&);

Erklärung des Additionsoperator für zwei Box-Objekte hinzugefügt werden, die endgültige Rückkehr von Box-Objekte. Die meisten überladenen Operatoren können definiert werden als normal oder Dritt Funktionen als Klassenelementfunktionen definiert sind. Wenn wir die obige Funktion als Drittfunktionsklassen definieren, dann müssen wir zwei Parameter für jede Operation zu passieren, wie folgt:

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

Das folgende Beispiel zeigt die Member-Funktion Betreiber Überlastung Konzept. Hier wird das Objekt als Parameter übergeben, Eigenschaften eines Objektsdieses Operator zugegriffen werden , wie folgt:

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

Wenn der obige Code kompiliert und ausgeführt wird, erzeugt es die folgenden Ergebnisse:

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

Überladene Operatoren können / kann nicht Betreiber überlastet werden

Es folgt eine Liste der Operatoren können überlastet werden:

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

Es folgt eine Liste der Operatoren können nicht überlastet werden:

::.*.?:

Beispiele für Überladen von Operatoren

Nachfolgend finden Sie eine Vielzahl von Bediener Beispiele Überlastung Sie helfen, besser zu verstehen, das Konzept der Überlastung.

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