English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
C++ 동일한 범위 내의함수과연산자여러 정의를 지정하며, 각각함수 오버로드과연산자 오버로드。
오버로드 선언은 이전에 해당 범위 내에서 이미 선언된 함수나 메서드와同名인 선언을 가리키며, 그들의 매개변수 목록과 정의(구현)는 다릅니다.
하나의오버로드 함수또는오버로드 연산자할 때, 컴파일러는 사용자가 사용한 매개변수 유형과 정의 중의 매개변수 유형을 비교하여 가장 적합한 정의를 선택합니다. 가장 적합한 오버로드 함수나 오버로드 연산자 선택 과정은오버로드 결정。
동일한 범위 내에서는 동일한 이름의 기능이 비슷한 여러 함수를 선언할 수 있지만, 이同名 함수의 형식 매개변수(매개변수의 개수, 유형 또는 순서를 가리킵니다)는 다르여야 합니다. 함수를 오버로드하는 것은 반환 유형의 차이만으로는 불가합니다.
다음 예제에서는同名 함수 print() 다양한 데이터 타입을 출력하는 데 사용됩니다:
#include <iostream> using namespace std; class printData { public: void print(int i) cout << "정수가: " << i << endl; } void print(double f) cout << "부동점수가: " << f << endl; } void print(char c[]) cout << "문자열이: " << c << endl; } }; int main(void) { printData pd; // 정수 출력 pd.print(5); // 부동점수 출력 pd.print(500.263); // 문자열 출력 char c[] = "Hello C++"; pd.print(c); return 0; }
위의 코드가 컴파일 및 실행될 때, 다음과 같은 결과가 생성됩니다:
정수는: 5 부동점수는: 500.263 문자열은: Hello C++
C++ 내장 연산자. 이렇게 하면, 사용자 정의 타입의 연산자를 사용할 수 있습니다.
오버로드 연산자는 특별한 이름을 가진 함수이며, 함수 이름은 'operator' 키워드와 그 뒤의 오버로드 연산자 기호로 구성됩니다. 다른 함수와 마찬가지로, 오버로드 연산자는 반환 타입과 매개변수 목록을 가집니다.
Box operator+(const 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; } // 재로드 + 연산자, 두 개의 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; // 선언1타입으로 Box Box Box2; // 선언2타입으로 Box Box Box3; // 선언3타입으로 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 << "Box1의 부피:" << volume << endl; // Box2 의 부피 volume = Box2.getVolume(); cout << "Box2의 부피:" << volume << endl; // 두 개의 객체를 더하면, Box3 Box3 = Box1 + Box2; // Box3 의 부피 volume = Box3.getVolume(); cout << "Box3의 부피:" << volume << endl; return 0; }
위의 코드가 컴파일 및 실행될 때, 다음과 같은 결과가 생성됩니다:
Box1의 부피: 210 Box2의 부피: 1560 Box3의 부피: 5400
다음은 재로드할 수 있는 연산자 목록입니다:
이중 계산 연산자 | + (덧),-(뺄),*(곱),/(구분), % (잔여) |
관계 연산자 | ==(동일), != (불동일), < (작음), > (큰), <= (작거나 같음), >= (큰거나 같음) |
논리 연산자 | || (논리 또는),&& (논리 및),! (논리 부정) |
단일 연산자 | + (정정),-(부정),*(포인터),&(주소 획득) |
자기 증가 감소 연산자 | ++(자기 증가),--(자기 감소) |
비트 연산자 | | (비트 이진 또는),& (비트 이진 및),~(비트 이진 반전),^(비트 이진 이xor), << (좌이동),>>(우이동) |
할당 연산자 | =, +=, -=, *=, /= , %= , &=, |=, ^=, <<=, >>= |
공간 지정 및 해제 | new, delete, new[ ] , delete[] |
기타 연산자 | ()(함수 호출),-(멤버 접근),(쉼표),[ ](인덱싱) |
다음은 재로드할 수 없는 연산자 목록입니다:
.:成员访问运算符
.: оператор доступа к члену*. -,*>
: оператор доступа к члену
::: оператор области
sizeof: оператор длины
?:: условный оператор
다음은 다양한 연산자 오버로드 예제를 제공하여, 오버로드 개념을 더 잘 이해하도록 도와줍니다.
순서 | 연산자와 예제 |
---|---|
1 | 원자 연산자 오버로드 |
2 | 이진 연산자 오버로드 |
3 | 관계 연산자 오버로드 |
4 | 입력/출력 연산자 오버로드 |
5 | ++ 과 -- 연산자 오버로드 |
6 | 할당 연산자 오버로드 |
7 | 함수 호출 연산자 () 오버로드 |
8 | 인덱스 연산자 [] 오버로드 |
9 | 클래스 멤버 접근 연산자 -> 오버로드 |