오버로드 함수와 연산자

오버 기능 : 동일한 범위, 동일한 기능은 동일한 이름의 여러 기능들을 선언 할 수 있지만, 이들 파라미터의 형태의 함수로서 동일한 이름 (파라미터의 개수를 참조 형식이나 순서)는 달라야한다. 당신은 오버로드 된 함수는 다른 유형을 반환 할 수 없습니다 만에 의해.

1 #INCLUDE <iostream>
 2  사용  스페이스 성병;
3  
4  계산
 5  {
 6  공용 :
 7      정적  INT GetSum ( INT A, INT의 b)
 8      {
 9          복귀 A + B;
10      }
 11      정적  INT GetSum ( INT A, INT의 B, INT c)
 12      {
 13          리턴 A + B + C;
14      }
15      / * 정적 더블 GetSum (A INT, INT의 B) // 여기에만 반환 형식을 변경하고, 오버 기능은, 그것을 설명한다 때문이
 16      {
 17.          ] 복귀 A + B
 18이다      } * / 
. 19      정적  더블 GetSum을 ( 더블 A, 더블 B)
 (20)가      {
 21은          리턴 A + , B
 (22)는      }
 23는      정적  더블 GetSum ( 더블 A, 이중 B, 더블 C)
 24      {
 25          리턴 A + B + C;
 26이다      }    
27  };
28  
(29)  INT ) (주
 30  {
 31      COUT << 계산 :: GetSum ( 5 , 6 ) << ENDL
 32          << 계산 :: GetSum ( 1.1 , 2.1 , 3.3 ) << ENDL;
33      반환  0 ;
34 }

결과 :  11 6.5 

과부하 연산자 : 연산자 오버로드는 키 연산자와 기호를 무시하는 운전자가 뒤에 이름, 함수 이름과 특별한 기능입니다. 다른 기능과 마찬가지로, 오버로드 된 연산자는 반환 형식과 인수 목록이 있습니다. 정상적인 또는 비 멤버 함수 클래스의 멤버 함수로서 정의된다 대부분 오버 연산자가 정의 될 수있다. 우리가 과부하 가정 "+", 우리는 비 멤버 함수의 클래스를 정의하는 경우가 반원 기능만을 전달할 필요가있는 경우, 우리는 각각의 동작을 위해 두 개의 매개 변수를 전달해야한다. 운영자 이유 과부하 나는 아주 나쁜 주인을 느끼고, 그래서 지금 일시적처럼 알고, 그것에 대해 깊이에 다시 올 수있는 기회를 가질 수있다. 말했다 방식 과부하 사업자에 대해 다음 연산자 연산자의 반환 형식 (매개 변수) {} 밤의 실현을 위해 :  BOOL의 opreator - () {false를 반환;}  ,이 기능은 멤버 함수를 오버로드 그 이유는 무엇입니까? 때문에 "-"우리는 적어도 인수를 필요로하지만 그것은 단지 자신의 클래스가 될 수있는 하나없는이 연산자.

. (1) #INCLUDE <iostream>
 2  은 USING  스페이스 STD]
 . 3  
. 4  Studnet
 . 5  {
 . 6  공용 :
 . 7      INT의 SUM = 0 ;
 . 8      INT SUM2 = 0 ;
 . 9      INT의 제수 = 0 ;
 10      INT의 = 배당 0 ;
 11.    //이 과부하 두 변수의 함수를 합산들이 인수 달성
 12된다      Studnet 운영자 / ( CONST가 Studnet & D)이      // 아래 및 const를 사용하여 설명하도록한다. 여기 반환 형식은 클래스 
(13)     {
 14          Studnet STD;
 15          std.sum + = d.dividend d.divisor 2 개 개의 변수가 추가 변수 //
 16          std.sum2를 = 은이 -> + 배당 은이 -> 제수 // 클래스 자체 두 변수 또한
 . 17          STD;
 18이다      }
 (19).  }
 (20)는  
21이다  
(22)는  지능 () 본체
 (23)가  {
 24      ; Studnet ST1
 25      Studnet ST2;
 26이다      Studnet ST3;
 27  
(28)      st1.dividend = 5. ;
 29      st1.divisor = . 6 ;
30      st2.dividend = 10 ;
31      st2.divisor = 20 ;
32  
33      ST3 = ST2 / ST1;
34      COUT << st3.sum << ENDL
 35          << st3.sum2 << ENDL;
36      반환  0 ;
37 }

우리는 결과를 살펴 보자  . 11 (30)  , 우리는 매개 변수 D는 변수 ST1 및 (SUM) 클래스의 멤버 함수는 해당 값을 전달하는 파라미터이면, 설명의 기능을 오버로드되는 것을 발견 그 뒤에이 매개 변수 (ST1). 그리고 이것은 그 (ST2)을 의미한다. 왜 경우, 그것을이다 우리

INT의 A = 10 ;
 INT B = 10 ; 
a.add (B)는 동일하다 + B

이 자연스럽게 분명. 비 멤버 함수는 같은 이유이지만, 두 개의 매개 변수가 된 경우. 이리와 통화 CONST 및이 사용 믹스 : 및 복사 방지 데이터 값 전송에 참조에 의해 전달, CONST이 변경되는 데이터를 보호하는 것입니다. 기존의 값을 억제하면서 CONST 및 생성자 함수 호출 부하를 복사한다. 우리가 전달 된 값을 사용하는 경우 때문에, 매개 변수 인수는 카피 (복사)입니다.

추천

출처www.cnblogs.com/xiaodangxiansheng/p/10986146.html