Latest web development tutorials

C ++ 함수 오버로드와 연산자 오버로딩

C ++, 그것은기능 과부하 및 연산자 오버로딩이라고이상의 정의를 지정하기 위해 동일한 범위에서함수와연산자 중 하나있습니다.

오버로드 문은 함수 나 메소드 선언은 같은 이름을 가진 전에이 범위에 선언 된 일이지만, 매개 변수 및 정의 (구현) 자신의 목록은 동일하지 않습니다.

당신이오버로드 된 함수또는오버로드 된 연산자를사용하는 매개 변수 유형을 통해 컴파일러 호출 할 때, 유형 및 매개 변수의 정의는 가장 적절한 정의의 선택을 결정하기 위해 비교된다.오버로드 해결이라는 가장 적합한 오버로드 된 함수 또는 연산자 오버로딩 프로세스를 선택합니다.

C ++에서 함수 오버로딩

동일한 범위에서는 같은 이름으로 여러 기능을 유사한 기능을 선언 할 수 있지만 이러한 형식 매개 변수는 같은 이름을 가진 기능과 달라야합니다 (수는 매개 변수 형식 또는 순차적를 의미한다). 당신은뿐만 아니라 오버로드 기능의 종류에 반환하여 할 수 있습니다.

다음 예에서, 같은 이름을프린트 함수 ()는서로 다른 출력 데이터 형식으로 사용된다 :

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

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

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

C ++에서 연산자 오버로딩

당신은 다시 정의 또는 C ++ 내장 된 사업자의 대부분을 대체 할 수 있습니다. 이것은 당신이 운영자의 사용자 정의 형식을 사용할 수 있습니다.

운영자는 특수 기능 이름으로 오버로드 함수 이름은 키 연산자와 기호를 무시하는 운전자옵니다. 그리고 다른 기능은 오버로드 된 연산자는 반환 형식과 매개 변수 목록이 있습니다.

Box operator+(const Box&);

이 상자 개체에 대한 추가 연산자의 성명, 추가 상자 객체의 최종 반환된다. 정상 비 멤버 함수 클래스의 멤버 함수로서 정의된다 대부분 오버 연산자를 정의 할 수있다. 우리는 비 멤버 함수 클래스로 위의 함수를 정의하면 다음과 같이 우리는, 각 작업에 대한 두 개의 매개 변수를 전달해야합니다 :

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

다음은 멤버 함수 연산자 오버로딩의 개념을 보여줍니다. 다음과 같이 여기에서, 파라미터로서 전달 된객체는,이 연산자를 사용하여 객체의 속성에 액세스 할 :

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

상기 코드는 컴파일되고 실행될 때, 다음과 같은 결과를

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

오버로드 연산자 / 연산자를 오버로드 할 수 없습니다 수 있습니다

다음은 운영자의 목록을 오버로드 할 수있다 :

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

다음은 운영자의 목록이 과부하 될 수있다 :

::.*.?:

연산자 오버로딩의 예

다음은 당신이 더 과부하의 개념을 이해하는 데 도움 연산자 오버로딩 예제의 다양한 제공합니다.

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