2016-12-21 6 views
0

안녕하세요, 값을 가져오고 값을 넣으려면 (array[0] = 4) 같은 값을 넣기 위해 간단한 배열 클래스를 만들고 싶습니다.이 프로그램은 내 프로그램이지만 삽입 할 때 같은 시간에 [] =을 사용하는 데 문제가 있습니다.대괄호에 대한 C++ 템플릿 클래스 연산자

template <typename Param> 
class arr 
{ 
private: 

    int Last_point = 0; 
    Param Data[]; 

public: 

    void& operator[]=(int Element_id, Param v) 
    { 
     Data[Element_id] = v; 
    } 

    Param& operator[] (int Element_id) 
    { 
     return Data[Element_id]; 
    } 
}; 



void main() 
{ 
    arr <int> Array; 


    Array[1] = 555; 

    cout << "Is(" << to_string(Array[1]) << ")" << endl; 

    system("pause"); 
} 

([] =)과 같은 연산자가 있습니까? 또는이, 나는 어떤 방법을 사용해야합니까? 또한 방금 사용하는 경우 가치를 얻고 싶습니다 []

+0

[연산자 오버로드] (http://stackoverflow.com/questions/4421706/operator-overloading)를 참조하십시오. – juanchopanza

+0

질문과 무관하게 Param Data []는 유효하지 않거나 포인터를 만듭니다. 두 경우 모두 크기를 지정해야합니다. 고정 크기가 필요하거나 힙에 요소를 할당하려고 했습니까? 두 경우 모두 적절한 복사 생성자, 복사 할당 연산자 및 소멸자가 필요합니다. –

+0

내 배열 어쩌면 100 만 개 이상의 요소가 ... 내가 뭘 기본 크기를해야합니까 !!! – Elh48

답변

2

operator[] 기능을 시도하는 구문이 잘못되었습니다. 당신은 누구의 크기가 런타임에 알려진 배열을 지원하려면

template <typename Param, std::size_t N> 
class arr 
{ 
    private: 

     Param Data[N]; 

    public: 

     Param& operator[](std::size_t i) 
     { 
     return Data[i]; 
     } 

     Param const& operator[](std::size_t i) const 
     { 
     return Data[i]; 
     } 
}; 

: 당신은 누구의 크기를 컴파일 타임에 알려진 배열을 지원하려면

// Version for non-const objects 
    Param& operator[](std::size_t i) 
    { 
    return Data[i]; 
    } 

    // Version for const objects 
    Param const& operator[](std::size_t i) const 
    { 
    return Data[i]; 
    } 

, 당신은 사용할 수 있습니다 : 당신은 같은 뭔가가 필요 , 다음을 사용할 수 있습니다. 그러나 The Rule of Three을 알고 있어야하며 복사 생성자와 복사 할당 연산자를 올바르게 구현해야합니다.

2

#include <iostream> 
using namespace std; 

template <typename Param, size_t Size> class arr { 
private: 
    Param Data[Size]; 
public: 
    Param &operator[](size_t Element_id) { 
    return Data[Element_id]; 
    } 
}; 

int main() { 
    arr<int, 3> Array; 
    Array[1] = 555; 
    cout << "Is(" << Array[1] << ")" << endl; 
} 

그러나, 모든 arr 내 코드에서하는 일은있을 덜 유용 std::array입니다!