산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

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

C++를 사용하면 함수에 대해 둘 이상의 정의를 지정할 수 있습니다. 이름 또는 연산자 함수 오버로딩이라고 하는 동일한 범위에서 및 연산자 과부하 각각.

오버로드된 선언은 동일한 범위에서 이전에 선언된 선언과 동일한 이름으로 선언된 선언입니다. 단, 두 선언 모두 인수가 다르고 정의가 분명히 다릅니다(구현).

오버로드된 함수를 호출할 때 또는 연산자 , 컴파일러는 함수 또는 연산자를 호출하는 데 사용한 인수 유형을 정의에 지정된 매개변수 유형과 비교하여 사용할 가장 적절한 정의를 결정합니다. 가장 적절한 오버로드된 함수 또는 연산자를 선택하는 프로세스를 오버로드 해결이라고 합니다. .

C++의 함수 오버로딩

동일한 범위에서 동일한 함수 이름에 대해 여러 정의를 가질 수 있습니다. 함수의 정의는 인수 목록의 인수 유형 및/또는 수에 따라 서로 달라야 합니다. 반환 유형만 다른 ​​함수 선언은 오버로드할 수 없습니다.

다음은 동일한 함수가 print()인 예입니다. 다른 데이터 유형을 인쇄하는 데 사용됩니다 -

라이브 데모
#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++에서 사용할 수 있는 대부분의 기본 제공 연산자를 재정의하거나 오버로드할 수 있습니다. 따라서 프로그래머는 사용자 정의 유형과 함께 연산자도 사용할 수 있습니다.

오버로드된 연산자는 특수 이름을 가진 함수입니다. 키워드 "operator" 다음에 정의되는 연산자의 기호가 옵니다. 다른 함수와 마찬가지로 오버로드된 연산자에는 반환 유형과 매개변수 목록이 있습니다.

Box operator+(const Box&);

추가하는 데 사용할 수 있는 더하기 연산자를 선언합니다. 두 개의 Box 객체를 만들고 최종 Box 객체를 반환합니다. 대부분의 오버로드된 연산자는 일반 비멤버 함수 또는 클래스 멤버 함수로 정의될 수 있습니다. 위의 함수를 클래스의 비멤버 함수로 정의하는 경우 다음과 같이 각 피연산자에 대해 두 개의 인수를 전달해야 합니다. -

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

다음은 멤버 함수를 사용하여 연산자 오버로드의 개념을 보여주는 예제입니다. 여기에서 객체는 이 객체를 사용하여 속성에 액세스할 인수로 전달되며 이 연산자를 호출할 객체는 this를 사용하여 액세스할 수 있습니다. 아래 설명된 연산자 -

라이브 데모
#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;
      }
      
      // Overload + operator to add two Box objects.
      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;      // Length of a box
      double breadth;     // Breadth of a box
      double height;      // Height of a box
};

// Main function for the program
int main() {
   Box Box1;                // Declare Box1 of type Box
   Box Box2;                // Declare Box2 of type Box
   Box Box3;                // Declare Box3 of type Box
   double volume = 0.0;     // Store the volume of a box here
 
   // box 1 specification
   Box1.setLength(6.0); 
   Box1.setBreadth(7.0); 
   Box1.setHeight(5.0);
 
   // box 2 specification
   Box2.setLength(12.0); 
   Box2.setBreadth(13.0); 
   Box2.setHeight(10.0);
 
   // volume of box 1
   volume = Box1.getVolume();
   cout << "Volume of Box1 : " << volume <<endl;
 
   // volume of box 2
   volume = Box2.getVolume();
   cout << "Volume of Box2 : " << volume <<endl;

   // Add two object as follows:
   Box3 = Box1 + Box2;

   // volume of box 3
   volume = Box3.getVolume();
   cout << "Volume of Box3 : " << volume <<endl;

   return 0;
}

위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -

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

과부하 가능/과부하 불가능 연산자

다음은 오버로드될 수 있는 연산자 목록입니다 -

+ - * / % ^
& | ~ ! , =
< > <= >= ++ --
<< >> == != && ||
+= -= /= %= ^= &=
|= *= <<= >>= [] ()
-> ->* 신규 신규[] 삭제 삭제[]

다음은 오버로드할 수 없는 연산자 목록입니다 -

:: .* . ?:

연산자 오버로딩 예제

다음은 개념을 이해하는 데 도움이 되는 다양한 연산자 오버로딩 예제입니다.

Sr.No 연산자 및 예
1 단항 연산자 오버로딩
2 이진 연산자 오버로딩
3 관계 연산자 오버로딩
4 입력/출력 연산자 오버로딩
5 ++ 및 -- 연산자 오버로딩
6 할당 연산자 오버로딩
7 함수 호출() 연산자 오버로딩
8 [] 연산자 오버로딩 첨자
9 클래스 멤버 액세스 연산자 -> 오버로딩

C 언어

  1. C++ 프로그래밍에서 함수에 배열 전달
  2. C++ 클래스 및 개체
  3. C++ 메모리 관리:신규 및 삭제
  4. C++ 공개, 보호 및 비공개 상속
  5. C++ friend 함수 및 friend 클래스
  6. C 구조 및 기능
  7. 파이썬 연산자 오버로딩
  8. 예제가 있는 C++의 연산자:정의, 유형 및 프로그램
  9. 예제를 사용한 C++ 연산자 오버로딩
  10. 프로그램 예제가 있는 C++ 함수