Latest web development tutorials

Funkcja C ++ przeciążenie i przeciążanie operatorów

C ++ pozwala jedną zfunkcji i operatoróww tym samym zakresie, aby określić więcej niż jedną definicję, jest wywoływanafunkcja przeciążeniaiprzeciążanie operatorów.

Przeciążone stwierdzenie to taki, który został ogłoszony w tym zakresie przed deklaracje funkcji lub metody mają taką samą nazwę, ale ich lista parametrów i definicji (realizacja) nie są takie same.

Podczas wywoływaniafunkcji przeciążony lub przeciążony operator,kompilator przez typ parametru, którego używasz, typ i określenie parametrów w porównaniu do decydować o wyborze najbardziej odpowiedniej definicji. Wybierz najbardziej odpowiednią funkcję przeciążony lub proces przeciążanie operatorów, zwanyrozdzielczości przeciążenia.

W C ++ funkcja przeciążenia

W tym samym zakresie, można zadeklarować kilka funkcji podobną funkcję o tej samej nazwie, ale te formalne parametry (liczba odnosi się do typu parametru lub kolejno) funkcji o tej samej nazwie musi być inna. Można nie tylko przez powrót do różnych typów przeciążonych funkcji.

Poniższe przykłady, taka sama jak nazwa funkcjiprint () jest używana do różnych typów danych wyjściowych:

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

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

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

W C ++ operatora przeciążanie

Można zmienić lub zastąpić większość C ++ wbudowanych operatorów. To pozwala na użycie niestandardowych typów operatorów.

Operator jest przeciążony ze szczególnym nazwa funkcji, nazwa funkcji następuje przez głównego operatora i operatora, aby zastąpić symbole. I inne funkcje, przeciążone operatory mają typ zwracany oraz listę parametrów.

Box operator+(const Box&);

Oświadczenie operator dodawania do dwóch obiektów Box dodaje, ostateczny zwrot obiektów Box. Najbardziej przeciążone operatorzy mogą być określone jako normalne lub trzecimi funkcje są zdefiniowane jako funkcje członkiem klasy. Jeśli zdefiniujemy powyższą funkcję jak klasach czynnościowych niebędącego państwem, to musimy zdać dwa parametry dla każdej operacji w następujący sposób:

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

Poniższy przykład ilustruje funkcję składową przeciążanie operatorów koncepcji. Tutaj, obiekt przekazany jako parametr, właściwości obiektu za pomocątego operatora można uzyskać w następujący sposób:

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

Gdy powyższy kod jest kompilowany i wykonany, że daje następujące wyniki:

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

Przeciążone operatorzy mogą / nie mogą być przeciążone operatory

Poniżej znajduje się lista operatorów może być przeciążony:

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

Poniżej znajduje się lista operatorów nie może być przeciążony:

::.*.?:

Przykłady przeciążenia operatora

Poniżej przedstawiono szereg przykładów operatora przeciążenia, które pomogą Ci lepiej zrozumieć pojęcie przeciążenia.

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