c++赋值运算符重载

c++ assignment operator overloading

本文关键字:重载 赋值运算符 c++      更新时间:2023-10-16

大家好,我正试图为这个类编写一个赋值运算符,这样我就可以将类似int[] = {0, 1, 2, 3}的数组分配给我的Tableau类

最初我想做这个

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;
}

您可以使用:

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;

N = 5k作为arr的值来实例化operator=函数。因此,您可以获得数组的大小以及数组的内容。

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

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

它不会起作用。k2不是数组。它是指向int的指针,恰好指向k的第一个元素。