C++赋值运算符重载
c++ assignment operator overloading
大家好我正在尝试为此编写一个赋值运算符 class 以便我可以将这样的数组int[] = {0, 1, 2, 3}
分配给我的 Tableau class
本来我想做这个
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;
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
.
的第一个元素
大家好我正在尝试为此编写一个赋值运算符 class 以便我可以将这样的数组int[] = {0, 1, 2, 3}
分配给我的 Tableau class
本来我想做这个
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;
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
.