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 = 5 и k как значение 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, я добавил немного больше информации в ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^