클래스에 배열 인덱스를 적용시키게 하는 연산자
소스코드
#include <iostream>
using namespace std;
class Array {
int* arr;
int size;
int capacity;
public:
//기본 생성자 cap매개변수 100을 받고 capacity를 100으로 초기화하여 arr크기를 100칸 할당하여 arr에 넣는다.
Array(int cap = 100) : arr(0), size(0), capacity(cap) {
arr = new int[capacity]; //arr[100]
}
~Array() {
delete[] arr; //동적 할당 해제
}
void Add(int data) {
if (size < capacity)
arr[size++] = data;
}
int Size() const {
return size;
}
int operator[] (int index) const {
return arr[index];
}
int& operator[](int index) {
return arr[index];
}
};
void main() {
Array ar(10); //ar배열 10칸 생성
ar.Add(10);
ar.Add(20);
ar.Add(30);
cout << ar[0] << endl;
cout << endl;
const Array& ar2 = ar;
cout << ar2[0] << endl;
cout << endl;
ar[0] = 100;
//const변수는 const함수를 불러와서 지역변수를 불변시키는 const에 대입X
//ar2[0] = 100; //에러! 상수 객체를 반환하므로 대입할 수 없음.
}
코드내용
1. Main함수에서 Array클래스 ar을 매개변수 10을 전달하여 10크기의 Array클래스 ar배열을 생성한다.
2. ar에 10, 20, 30을 순차적으로 삽입한다. 10개초과 삽입시 Add함수에 if문에 적합하지 않아서 삽입되지 않는다.
3. ar[0]으로 int& operator[] (int index) 함수 호출
4. const Array& 형 ar2 에 기존 ar삽입
5. ar2는 const 이므로 int operator[] (int index) const 함수 호출
6. ar[0]은 const가 아니기때문에 삽입이 가능
7. ar2는 const이기 때문에 상수 객체를 반환하므로 대입이 불가능.
결과
'C++ > STL' 카테고리의 다른 글
[STL] 클래스 타입 변환 연산자 오버로딩 (0) | 2025.02.09 |
---|---|
[STL] 타입 변환 연산자 오버로딩 (0) | 2025.02.09 |
[STL] 스마트 포인터 (0) | 2025.02.09 |
[STL] 함수 호출 연산자 오버로딩 (0) | 2025.02.09 |
[STL] 연산자 오버로딩 (0) | 2025.02.08 |