重载'='不起作用
Overloading '=' does not work
我正在编写一个代码,我使用'='运算符将一个对象分配给另一个对象和复制构造函数。这是代码
DJSet(const DJSet& ds)
{
vector<Element<T>* > vec= ds.v_;
for (int i = 0; i < vec.size(); i++)
{
v_.push_back(vec[i]);
}
//cout << "Copy Calledn";
}
DJSet operator=(DJSet ds)
{
DJSet<T> djs;
vector<Element<T>* > vec = ds.v_;
for (int i = 0; i < vec.size(); i++)
{
djs.v_.push_back(vec[i]);
}
cout << "= Calledn";
return djs;
}
类DJSET仅包含一个Element<T>* type
的一个向量因此,当我执行下面的代码时。
DJSet<string> djs_rhs;
DJSet<string> djs_lhs;
cin >> name;
djs_rhs.add(name);
cin >> name;
djs_rhs.add(name);
cin >> name;
djs_lhs.add(name);
cin >> name;
djs_lhs.add(name);
djs_lhs = djs_rhs;
cout << djs_lhs << endl;
cout << endl;
cout << djs_rhs << endl;
它没有复制右侧到左侧对象的值,并且正在调用复制构造函数和'='operator。请在这件事上给予我帮助。我如何继续这样做?我可以提供整个源代码。
您的操作员构造了一个新的临时对象,并将其返回。这是不正确的。根据定义,分配运算符必须分配给this
对象,然后返回this
的引用:
DJSet &operator=(const DJSet &ds)
{
// Fill in the blank.
return *this;
}
,如所证明的,=
操作员应采用const
参考参数,而不是新的临时对象。
您需要填写空白,并按照您需要做的事情将*this
的内容替换为作为参数传递的对象的内容。
DJSet operator=(DJSet ds)
-这将逐值 ds
参数,因此,每当使用分配运算符时,编译器都会调用复制构造函数。将其更改为DJSet operator=(const DJSet& ds)
以通过参考将其通过,以使代码不会在此处复制。
DJSet<T> djs;
-这将创建 local 对象,其余代码将修改该本地对象。在任务操作员的结束时,本地对象被摧毁,所有工作都被抛弃了。摆脱它。
vector<Element<T>* > vec = ds.v_;
-这是向量的本地副本,然后将其用于在对象内部设置值。不需要;您可以直接从ds.v_
复制,而无需此额外的向量。摆脱它,然后将djs.v_.push_back(vec[i]);
更改为v_.push_back(ds.v_)
。
op = j op be:
DJSet &operator=(const DJSet &ds)
{
vector<Element<T>* > vec = ds.v_;
for (int i = 0; i < vec.size(); i++)
{
v_.push_back(vec[i]);
}
cout << "= Calledn";
return *this;
}
在您的实现中,您不是修改左对象,而是一个临时对象。通常,复制构造函数和运算符=几乎应该是相同的,除了上次返回 *this。
- 重载运算符 (<<) cout 在 c ++ 中不起作用,当我互相减去两个矩阵时不起作用
- 为什么重载运算符>在参数声明 const 时不起作用?
- 重载"+="运算符:c+=a_times_b 有效,但 c+=a*b 不起作用?
- = 重载不起作用
- 类中的重载函数(Students())是输出输入的信息,但它不起作用
- 为什么 SFINAE 在这个简单的成员函数重载中不起作用
- C++ 运算符重载 += 有效,但<<不起作用
- 需要使用 Book* 头变量重载运算符,但不起作用
- C++ 运算符删除重载对派生类不起作用
- 为什么重载运算符上的异常说明符'<<'不适用于任何 std::ostream 对象,但对库中定义的运算符不起作用?
- 运算符重载如何工作,为什么在我的情况下不起作用?
- 为什么重载运算符不起作用?
- 重载'='不起作用
- 二叉搜索树<<运算符重载不起作用
- 重载运算符<<不起作用
- 重新赋值在运算符中不起作用 = 重载
- 类构造函数重载不起作用
- c++中的函数重载不起作用
- 为什么 [] 的重载函数在这里不起作用?
- 如果重载函数仅被部分重写,则多态性不起作用