2016-05-04 162 views
0

大家好我試着寫了這個類的賦值運算符,所以我可以這樣int[] = {0, 1, 2, 3}數組分配給我的Tableau類C++賦值運算符重載

本來我想做到這一點

Tableau<T>& operator=(T arr[]) 
{ 
return Tableau(tab, sizeofarray); 
} 

,因爲我已經寫了一個構造函數,其數組和大小作爲它的參數

和我遇到了一個問題,數組的大小我不知道如何找到它 我如何找到大小的陣列或是否有更好的方式來做到這一點

template<typename T> 
class Tableau 
{ 
public: 
Tableau(int s = 0) : size(s), ptr(new T[size]) 
{ 
    for (int i = 0; i < size; i++) 
    { 
     ptr[i] = 0; 
    } 
} 
Tableau(T tab[], int s = 0) : size(s), ptr(new T[size]) 
{ 
    for (int i = 0; i < size; i++) 
    { 
     ptr[i] = tab[i]; 
    } 
} 

~Tableau() 
{ 
    delete[] ptr; 
} 
Tableau<T>& operator=(T tab[]) 
{ 

} 
T commule() 
{ 
    T com = 0; 
    for (int i = 0; i < size; i++) 
    { 
     com += ptr[i]; 
    } 
    return com; 
} 
T& operator[](const int index) 
{ 
    return ptr[index]; 
} 
private: 
int size; 
T* ptr; 
}; 

int main() 
{ 
int k[] = { 8, 12, 5, 9, 55}; 
Tableau<int> TI(k, 2); 
TI = k; 
return 0; 
} 

回答

5

您可以使用:

template <std::size_t N> 
Tableau<T>& operator=(T (&arr)[N]) 
{ 
    // This is not right. 
    // The returned value is a temporary. 
    // return Tableau(arr, N); 

    // Update the contents of the object. 

    // ... 

    // Then, return a reference to this object. 
    return *this; 
} 

隨着該成員函數模板,當你調用:

int k[] = { 8, 12, 5, 9, 55}; 
Tableau<int> TI(k, 2); 
TI = k; 

operator=功能被實例化與N = 5k的值爲arr。因此,您可以獲得數組的大小以及數組的內容。

然而,值得指出的是,如果你使用:

int k[] = { 8, 12, 5, 9, 55}; 
int* k2 = k; 
Tableau<int> TI(k, 2); 
TI = k2; 

將無法​​正常工作。 k2不是數組。它是指向int的指針,恰好指向k的第一個元素。

+0

'template '爲了便攜。 – kfsone

+0

謝謝你的回答 請詳細說明一下,如果你可以 – user259584

+0

@ user259584,我在答案中增加了一些信息。 –