我编写了一个复制所有变量值的类perform
的重载赋值运算符。
例如:在Exp.cpp
class perform
{
LOG *ptr;
int a;
//constructor
//destructor
perform operator=(const perform & rhs){
ptr = rhs.ptr; a=rhs.s;
return * this;}
};
在另一个班级output
中,我已经为abc
声明了一个指针。
perform * ptr = StatCol::CreateCol(frm);
abc = ptr; //this line should invoke assignment overloaded.
//but in my case it's not invoked.
答案 0 :(得分:9)
假设abc是一个Perform对象,你需要取消引用你指定的指针:
abc = * ptr;
如果abc本身是一个指针,那么你不能做你想要的 - 你不能在LHS是一个指针的地方重载赋值。您必须取消引用两个指针:
* abc = * ptr;
答案 1 :(得分:0)
此外,通过引用返回更安全,从而避免调用复制构造函数。
const perform& operator=(const perform & rhs){
if (this != &rhs)
{
ptr = rhs.ptr; a=rhs.s;
}
return * this;
}
答案 2 :(得分:0)
Custom assignment operator works only with user defined types so do like this:
perform p1,p2;
p1 = p2;
perform *p = &p2;
p1 = *p;
You can't override assignment of built in types(int , char etc.).
perform *p1,*p2;
p1 = p2;
It simply copies the address of p2 to p1.
答案 3 :(得分:0)
在示例代码中,您正在分配指针,因此在不取消引用指针的情况下,您无法调用赋值运算符。
使用这种设计,进行浅拷贝的风险很大。此外,C ++赋值运算符签名是:'perform& operator =(...)'如标准中所述。它必须返回对同一对象的引用,以便编译器按照您的预期进行考虑。