D 프로그래밍-과부하

D를 사용하면 하나 이상의 정의를 지정할 수 있습니다. function 이름 또는 operator 같은 범위에서 function overloadingoperator overloading 각기.

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

과부하를 호출 할 때 function 또는 operator, 컴파일러는 함수 또는 연산자를 호출하는 데 사용한 인수 유형을 정의에 지정된 매개 변수 유형과 비교하여 가장 적합한 정의를 결정합니다. 가장 적절한 과부하 기능 또는 연산자를 선택하는 프로세스가 호출됩니다.overload resolution..

함수 과부하

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

다음 예제는 동일한 기능을 사용합니다. print() 다른 데이터 유형을 인쇄하려면-

import std.stdio; 
import std.string; 

class printData { 
   public: 
      void print(int i) { 
         writeln("Printing int: ",i); 
      }

      void print(double f) { 
         writeln("Printing float: ",f );
      }

      void print(string s) { 
         writeln("Printing string: ",s); 
      } 
}; 
 
void main() { 
   printData pd = new printData();  
   
   // 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 D"); 
}

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

Printing int: 5 
Printing float: 500.263 
Printing string: Hello D

연산자 오버로딩

D에서 사용할 수있는 대부분의 내장 연산자를 재정의하거나 오버로드 할 수 있습니다. 따라서 프로그래머는 사용자 정의 유형에도 연산자를 사용할 수 있습니다.

연산자는 오버로드되는 연산자를 기반으로 문자열 op 다음에 Add, Sub 등을 사용하여 오버로드 할 수 있습니다. 연산자 +를 오버로드하여 아래와 같이 두 개의 상자를 추가 할 수 있습니다.

Box opAdd(Box b) { 
   Box box = new Box(); 
   box.length = this.length + b.length; 
   box.breadth = this.breadth + b.breadth; 
   box.height = this.height + b.height; 
   return box; 
}

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

import std.stdio;

class Box { 
   public:  
      double getVolume() { 
         return length * breadth * height; 
      }

      void setLength( double len ) { 
         length = len; 
      } 

      void setBreadth( double bre ) { 
         breadth = bre; 
      }

      void setHeight( double hei ) { 
         height = hei; 
      }

      Box opAdd(Box b) { 
         Box box = new 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 
void main( ) { 
   Box box1 = new Box();    // Declare box1 of type Box 
   Box box2 = new Box();    // Declare box2 of type Box 
   Box box3 = new Box();    // 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(); 
   writeln("Volume of Box1 : ", volume);
   
   // volume of box 2 
   volume = box2.getVolume(); 
   writeln("Volume of Box2 : ", volume); 
   
   // Add two object as follows: 
   box3 = box1 + box2; 
   
   // volume of box 3 
   volume = box3.getVolume(); 
   writeln("Volume of Box3 : ", volume);  
}

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

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

연산자 오버로딩 유형

기본적으로 아래와 같이 세 가지 유형의 연산자 오버로딩이 있습니다.

Sr. 아니. 오버로딩 유형
1 단항 연산자 오버로딩
2 이항 연산자 오버로딩
비교 연산자 오버로딩