C++에서 대괄호 연산자 오버로드
이 간단한 프로그래밍 가이드는 대괄호([]
) 연산자를 클래스 개체에 대한 getter 및 setter로 오버로드합니다.
먼저 연산자 오버로딩에 대해 간단히 소개하겠습니다.
C++에서 연산자 오버로딩
클래스 및 구조체와 같은 사용자 정의 데이터 유형으로 작업하는 동안 연산자의 동작 방식을 수정하는 아이디어를 연산자 오버로드라고 합니다. 이들은 해당 연산자가 사용될 때 호출되는 클래스의 멤버 함수와 유사합니다.
예를 들어 Employees
클래스에서 다른 직원보다 급여가 높은 직원을 확인하려고 한다고 가정합니다. >
연산자는 두 개체의 salary
데이터 멤버를 비교하고 결과를 반환하도록 오버로드될 수 있습니다.
연산자 오버로딩 구문은 다음과 같습니다.
class ClassIdentifier {
[AccessSpecifier] : ReturnType operator OperatorSymbol([list of arguments]) {
// definition
}
};
선택적 액세스 지정자는 public
이어야 합니다. 비공개
로 설정하면 오버로딩 함수는 클래스 내에서만 액세스할 수 있습니다.
이것은 대부분의 경우 일반적으로 바람직하지 않습니다.
operator
는 연산자 오버로딩에 사용되는 키워드입니다. 그런 다음 오버로드해야 하는 연산자의 기호를 지정합니다. int, char, float 등과 같은 기본 데이터 유형에 대해 연산자를 오버로드할 수 없음을 기억하십시오.
C++에서 대괄호 []
연산자 오버로드
클래스 개체에서 값을 가져오고 설정하는 데 사용할 수 있도록 []
대괄호 연산자를 오버로드할 수도 있습니다.
예를 들어 배열을 데이터 멤버로 포함하는 MyClass
클래스가 있습니다. 객체 이름을 사용하여 해당 배열의 요소에 액세스하려면 다음과 같이 []
대괄호 연산자를 오버로드할 수 있습니다.
class MyClass {
private:
int arr[5];
public:
int operator[](int i) const { return arr[i]; } // for getting value
int& operator[](int i) { return arr[i]; } // for setting value
};
사용자가 값을 변경할 수 있도록 값을 설정하기 위해 주어진 인덱스에 대한 참조를 반환했습니다. 다음과 같이 드라이버 프로그램에서 사용할 수 있습니다.
int main() {
MyClass obj;
obj[0] = 100; // setting values
obj[1] = 200; // setting values
cout << obj[0] << endl; // getting values
cout << obj[1] << endl; // getting values
return 0;
}
위의 main()
함수에서 obj[0] = 100;
일 때 가 실행되면 i
에 대한 인수로 0
을 사용하여 두 번째 오버로드된 함수를 호출합니다. 오버로드된 setter 메서드는 arr
의 0번째 인덱스 메모리 공간에 대한 정수 참조를 반환합니다.
이제 할당 연산자(=
)의 오른쪽에 있는 값이 반환된 위치에 할당됩니다. 따라서 obj
데이터 멤버의 0번째 인덱스에는 100
값이 지정됩니다.
위의 코드 조각을 하나의 완전한 실행 가능 프로그램으로 결합해 봅시다.
#include <iostream>
using namespace std;
class MyClass {
private:
int arr[5];
public:
int operator[](int i) const { return arr[i]; } // for getting value
int& operator[](int i) { return arr[i]; } // for setting value
};
int main() {
MyClass obj;
obj[0] = 100; // setting values
obj[1] = 200; // setting values
cout << obj[0] << endl; // getting values
cout << obj[1] << endl; // getting values
return 0;
}
출력:
100
200