| 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
                            Tags
                            
                        
                          
                          - 동영상
 - 동영상 강의
 - 실습으로 다지는 c#
 - 실습
 - 언제나 휴일
 - 추천
 - 파이썬
 - 표준 라이브러리 함수
 - 독립기념관
 - 표준 입출력
 - c언어
 - 프로젝트
 - 산책하기 좋은 곳
 - 졸업 작품 소재
 - 네트워크 프로그래밍
 - c#
 - 소스 코드
 - 충남 천안
 - 알고리즘
 - C++
 - 원격 제어 프로그램
 - 소켓 통신
 - 클래스 다이어그램
 - 유튜브 동영상 강의
 - Windows Forms
 - 언제나휴일
 - 강의
 - 안드로이드 앱 개발
 - 무료 동영상 강의
 - 캡슐화
 
                            Archives
                            
                        
                          
                          - Today
 
- Total
 
프로그래밍 언어 및 기술 [언제나휴일]
[C++] 50. 인덱스 연산자 중복 정의 본문
이번에는 인덱스 연산자 중복 정의를 살펴보기로 해요.
배열과 같은 컬렉션은 인덱스 연산을 통해 원소에 접근할 수 있게 사용자 편의를 제공하곤 합니다. 배열의 인덱스 연산의 결과는 좌항에 올 수도 있기 때문에 연산 결과는 원소 자체를 의미합니다. 만약 정수 형식의 데이터를 원소로 하는 배열 클래스를 정의하고 인덱스 연산자를 중복 정의한다면 원소 자체를 반환하게 구현해야 하므로 다음과 같이 정의합니다.
int &operator[](int index);//인덱스 연산자 중복 정의
다음은 인덱스 연산을 중복 정의하여 정수 형식의 데이터를 보관하는 DCArr 클래스를 정의하고 이를 사용한 예제 코드입니다.
//DCArray
#pragma once
class DCArray
{
    int *base;
    int bcapacity;
    int usage;
public:
    DCArray(int usage=0,int data=0);
    DCArray(const DCArray &src);//복사 생성자    
    ~DCArray();//소멸자    
    void Copy(const DCArray &src);//src 개체를 복사
    DCArray &operator=(const DCArray &src);//= 연산자 중복 정의            
    int &operator[](int index);//인덱스 연산자 중복 정의
    bool IsAvailIndex(int index)const;
private:
    void Init();
};
//DCArray.h
#include "DCArray.h"
DCArray::DCArray(int usage,int data)
{    
    Init();
    if(usage)
    {        
        base = new int[usage]; //bcapacity개수의 int 형식을 동적으로 생성        
        bcapacity = usage;
    }    
    for(   ;this->usage<usage; this->usage++) //data를 usage만큼 보관
    {
        base[this->usage] = data;
    }
}
DCArray::DCArray(const DCArray &src)
{
    Init();
    Copy(src);
}
DCArray::~DCArray()
{
    if(base)
    {
        delete[] base;
    }
}
void DCArray::Copy(const DCArray &src)//src 개체를 복사
{
    bcapacity = src.bcapacity;
    if(base)
    {
        delete[] base;
    }
    base = new int[bcapacity];
    usage = src.usage;
    for(int i = 0; i<usage;i++)
    {
        base[i] = src.base[i];
    }
}
DCArray &DCArray::operator=(const DCArray &src)//= 연산자 중복 정의    
{
    Copy(src);
    return (*this);
}
int &DCArray::operator[](int index)
{
    if(IsAvailIndex(index))
    {
        return base[index];
    }
    throw "유효하지 않은 인덱스를 사용하!!!";
}
bool DCArray::IsAvailIndex(int index)const
{
    return (index>=0)&&(index<usage);
}
void DCArray::Init()
{
    base = 0;
    bcapacity = usage = 0;
}
//인덱스 연산자 중복 정의
//Program.cpp
#include "DCArray.h"
#include <iostream>
using namespace std;
int main()
{
    DCArray dcarr(10);//저장소의 크기가 10인 동적 배열 선언
    dcarr[3] = 10;
    dcarr[9] = 9;
    for(int i = 0; i<10;i++)
    {
        cout<<dcarr[i]<<" ";
    }
    cout<<endl;
    return 0;
}'C & C++ > 디딤돌 C++' 카테고리의 다른 글
| [C++] 54. 개체 출력자 (0) | 2024.04.10 | 
|---|---|
| [C++] 53. iostream 흉내내기 (0) | 2024.04.10 | 
| [C++] 52. 함수 개체 (0) | 2024.04.09 | 
| [C++] 51. 묵시적 형 변환 연산자 중복 정의 (0) | 2024.04.09 | 
| [ C++] 49. 대입 연산자 중복 정의 (0) | 2024.04.09 | 
| [C++] 48. 증감 연산자 중복 정의 (0) | 2024.04.09 | 
| [C++] 47. 클래스에 연산자 중복 정의 (0) | 2024.04.09 | 
| [C++] 46. 전역 연산자 중복 정의 (0) | 2024.04.09 |