C++에서 대괄호 연산자 오버로드

Naila Saad Siddiqui 2023년10월12일
  1. C++에서 연산자 오버로딩
  2. C++에서 대괄호 [] 연산자 오버로드
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

관련 문장 - C++ Operator