๐ช
๋ฐฐ์ด์ ์ธ๋ฑ์ค ์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ
January 03, 2024
๋ฐฐ์ด์ ์ธ๋ฑ์ค ์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ
์ธ๋ฑ์ค ์ฐ์ฐ์
- C++์๋ ์ธ๋ฑ์ค ์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ๋ ์กด์ฌํ๋ค
- int ๋ฐฐ์ด์ ๊ฒฝ์ฐ :
int& operator[](int idx)
- ์ด๋ฅผ ํตํด ์๋ก์ด ํด๋์ค๋ฅผ ์ ์ํ๊ณ ๋ฐฐ์ด์ ๋ฒํผ๋ฅผ ๋ฒ์ด๋๋ ์ํฉ์ ์์ธ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํด์ง
- ์ : arr[-1], arr[-100], ํฌ๊ธฐ 3์ธ arr์์ arr[3] ๋ฑ
const ํจ์๋ฅผ ์ด์ฉํ ์ค๋ฒ๋ก๋ฉ์ ํ์ฉ
class BoundCheckIntArray{
private:
int * arr;
int arrlen;
BoundCheckIntArray(const BoundCheckIntArray& arr) {}
BoundCheckIntArray& operator=(const BoundCheckIntArray& arr) {}
public:
BoundCheckIntArray(int len) : arrlen(len){
arr = new int[len];
}
int& operator[] (int idx){
if(idx<0 || idx>=arrlen){
cout<<"Array index out of bound exception"<<endl;
exit(1);
}
return arr[idx];
}
int GetArrLen() const { return arrlen; }
~BoundCheckIntArray() { delete[] arr; }
};
void ShowAllData(const BoundCheckIntArray& ref){
int len = ref.GetArrLen();
for(int idx = 0 ; idx<len ; idx++){
cout<<ref[idx]<<endl;
}
}
int main(){
BoundCheckIntArray arr(5);
for(int i = 0 ; i < 5 ; i++){
arr[i] = (i+1)*11;
}
ShowAllData(arr);
return 0;
}
- ์ ์ฝ๋๋ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
- ์ด์ ๋?
void ShowAllData(const BoundCheckIntArray& ref){ int len = ref.GetArrLen(); for(int idx = 0 ; idx<len ; idx++){ cout<<ref[idx]<<endl; } }
- ์ ์ฝ๋์์ ์ธ์๋ก
BoundCheckIntArray
๊ฐ const๋ก ์ ๋ฌ๋์ด ์์ ์ ๋ง๊ณ ์๋ค. - ๊ทธ๋ฌ๋
operator=
์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ ํจ์๋ const ํจ์๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ ์ค๋ฅ๋ฅผ ๋ฐ์์ํด.
โ ๏ธ ์ธ์๊ฐ const๋ก ๋ค์ด์ค๋ฉด, constํจ์๊ฐ ์๋ ๋ชจ๋ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์์์ ์ ์
- ์ ์ฝ๋์์ ์ธ์๋ก
ํด๊ฒฐ๋ฐฉ์
operator=
์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ ํจ์๋ฅผ const์ธ๊ฒ ํ๋, ์๋๊ฒ ํ๋๋ก ์ค๋ฒ๋ก๋ฉํ๋ค.- ๊ฑฐ์ ์์ ํ ๊ฐ์ ํจ์์ด์ง๋ง, const๊ฐ ๋ถ๋ ์๋ถ๋์ ์ฐจ์ด๋ง ์์.
#include <iostream>
#include <cstdlib>
using namespace std;
class BoundCheckIntArray{
private:
int * arr;
int arrlen;
BoundCheckIntArray(const BoundCheckIntArray& arr) {}
BoundCheckIntArray& operator=(const BoundCheckIntArray& arr) {}
public:
BoundCheckIntArray(int len) : arrlen(len){
arr = new int[len];
}
/*
* ์์ ๋ ๋ถ๋ถ ์์------------------------------
*/
int& operator[] (int idx){
if(idx<0 || idx>=arrlen){
cout<<"Array index out of bound exception"<<endl;
exit(1);
}
return arr[idx];
}
int& operator[] (int idx) const{
if(idx<0 || idx>=arrlen){
cout<<"Array index out of bound exception"<<endl;
exit(1);
}
return arr[idx];
}
/*
* ์์ ๋ ๋ถ๋ถ ๋--------------------------------
*/
int GetArrLen() const { return arrlen; }
~BoundCheckIntArray() { delete[] arr; }
};
void ShowAllData(const BoundCheckIntArray& ref){
int len = ref.GetArrLen();
for(int idx = 0 ; idx<len ; idx++){
cout<<ref[idx]<<endl;
}
}
int main(){
BoundCheckIntArray arr(5);
for(int i = 0 ; i < 5 ; i++){
arr[i] = (i+1)*11;
}
ShowAllData(arr);
return 0;
}
- ์ด๋ฌ๋ฉด const๋ก ๋ค์ด์จ ์ธ์์ ๋ํด์๋ ๋ฐฐ์ด ์ธ๋ฑ์ค ์ฐ์ฐ์ ์ค๋ฒ๋ก๋ฉ ํจ์ ํธ์ถ์ด ๊ฐ๋ฅํด์ง๋ค.