user259584
user259584

Reputation: 65

c++ assignment operator overloading

Hello everyone i'm trying to write an assignment operator for this class so i can assign an array like thisint[] = {0, 1, 2, 3} to my Tableau class

originally i wanted to do this

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

because i already wrote a constructor that takes and array and the size as its argument

and i ran into a problem with the size of the the array i don't know how to find it how can i find the size of the array or is there a better way to do this

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

Upvotes: 0

Views: 750

Answers (1)

R Sahu
R Sahu

Reputation: 206567

You can use:

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

With that member function template, when you invoke:

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

The operator= function is instantiated with N = 5 and k as the value of arr. Hence, you get the size of the array as well as the contents of the array.

However, it is worth pointing out that if you use:

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

it won't work. k2 is not an array. It is a pointer to an int, which happens to point to the first element of k.

Upvotes: 5

Related Questions