【问题标题】:c++ assignment operator overloadingc++ 赋值运算符重载
【发布时间】:2016-08-30 11:50:30
【问题描述】:

大家好,我正在尝试为这个类编写一个赋值运算符,这样我就可以将一个像 thisint[] = {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;
}

【问题讨论】:

    标签: c++ arrays templates variable-assignment operator-keyword


    【解决方案1】:

    你可以使用:

    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 的第一个元素。

    【讨论】:

    • template &lt;std::size_t N&gt; 便于携带。
    • 谢谢您的回答,如果可以的话请详细说明
    • @user259584,我在答案中添加了更多信息。
    • @RSahu 谢谢先生
    • @RSahu 谢谢先生
    猜你喜欢
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 2012-04-22
    • 2015-06-01
    • 2012-08-17
    • 2011-01-27
    • 2011-05-31
    相关资源
    最近更新 更多