C ++重载加号运算符以将元素添加到对象
C++ Overloading the plus operator to add an element to an object
对象的构造函数
Set<T>::Set() {
buckets = new forward_list<T>[9];
numBuck = 9;
numElem = 0;
maxLoad = 9;
}
加号运算符重载
Set<T>::operator+(T elem){
Set<T> res;
return res;
}
我不知道从哪里开始。此重载运算符将其参数 elem
添加到 *this 的副本,并 return 结果。
例如:
Set<char>setA;
Set<char>setB;
setA.Add('a')
setA.Add('b')
setA.Add('c')
// setA contains {'a','b','c'}
setB = setA + 'd'
// setB should now contain {'a','b','c','d'}
有指导吗?
编辑:阐明运算符重载功能
对于*this
的拷贝,可以修改res
的定义,使用拷贝构造函数
Set<T> res(*this);
添加 elem
参数使用与向 setA
添加元素相同的方法。
res.Add(elem);
因为看起来您的代码正在管理一个指针,您将需要定义自己的析构函数,以释放分配的内存。
Set<T>::~Set() {
delete[] buckets;
}
由于三规则,您也有义务实现自己的复制构造函数和赋值运算符。您的复制构造函数需要执行自己的分配,并且需要复制另一个 Set
中的元素。
Set<T>::Set(const Set<T> &other) {
numBuck = other.numBuck;
numElem = other.numElem;
maxLoad = other.maxLoad;
buckets = new forwardList<T>[numBuck];
// ... add code to copy elements from other.buckets
}
赋值运算符可以使用复制交换惯用法来实现。
Set<T> & Set<T>::operator = (Set<T> other) {
using std::swap;
swap(*this, other);
return *this;
}
为避免需要实现您自己的析构函数/复制构造函数/赋值运算符方法,您可以选择用 vector
表示您的 buckets
而不是管理您自己的指针。
std::vector<forward_list<T>> buckets;
你可以只在集合中创建一个复制函数,并在重载中使用Add
函数。演示代码:
Set<T>::operator+(T elem)
{
Set<T> result;
result.Copy(*this);
result.Add(elem);
return result;
}
注意:或者您可以按照@jxh 的回答并使用默认的复制构造函数。为了明确起见,我会制作一个 Copy
函数。 :)
对象的构造函数
Set<T>::Set() {
buckets = new forward_list<T>[9];
numBuck = 9;
numElem = 0;
maxLoad = 9;
}
加号运算符重载
Set<T>::operator+(T elem){
Set<T> res;
return res;
}
我不知道从哪里开始。此重载运算符将其参数 elem
添加到 *this 的副本,并 return 结果。
例如:
Set<char>setA;
Set<char>setB;
setA.Add('a')
setA.Add('b')
setA.Add('c')
// setA contains {'a','b','c'}
setB = setA + 'd'
// setB should now contain {'a','b','c','d'}
有指导吗?
编辑:阐明运算符重载功能
对于*this
的拷贝,可以修改res
的定义,使用拷贝构造函数
Set<T> res(*this);
添加 elem
参数使用与向 setA
添加元素相同的方法。
res.Add(elem);
因为看起来您的代码正在管理一个指针,您将需要定义自己的析构函数,以释放分配的内存。
Set<T>::~Set() {
delete[] buckets;
}
由于三规则,您也有义务实现自己的复制构造函数和赋值运算符。您的复制构造函数需要执行自己的分配,并且需要复制另一个 Set
中的元素。
Set<T>::Set(const Set<T> &other) {
numBuck = other.numBuck;
numElem = other.numElem;
maxLoad = other.maxLoad;
buckets = new forwardList<T>[numBuck];
// ... add code to copy elements from other.buckets
}
赋值运算符可以使用复制交换惯用法来实现。
Set<T> & Set<T>::operator = (Set<T> other) {
using std::swap;
swap(*this, other);
return *this;
}
为避免需要实现您自己的析构函数/复制构造函数/赋值运算符方法,您可以选择用 vector
表示您的 buckets
而不是管理您自己的指针。
std::vector<forward_list<T>> buckets;
你可以只在集合中创建一个复制函数,并在重载中使用Add
函数。演示代码:
Set<T>::operator+(T elem)
{
Set<T> result;
result.Copy(*this);
result.Add(elem);
return result;
}
注意:或者您可以按照@jxh 的回答并使用默认的复制构造函数。为了明确起见,我会制作一个 Copy
函数。 :)