1

我编写了一个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.
4

4 回答 4

10

假设 abc 是 Perform 对象,您需要取消引用您分配的指针:

abc = * ptr;

如果 abc 本身是一个指针,那么你不能做你所要求的 - 你不能在 LHS 是指针的地方重载赋值。您将不得不取消引用两个指针:

* abc = * ptr;
于 2010-08-02T10:30:22.430 回答
0

此外,通过引用返回更安全,从而避免调用复制构造函数。

    const perform& operator=(const perform & rhs){

     if (this != &rhs)
     {
       ptr = rhs.ptr; a=rhs.s;
     }
     return * this;
   }
于 2010-08-02T10:43:14.760 回答
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.
于 2010-08-02T12:03:14.313 回答
0

在示例代码中,您正在分配指针,因此您不可能在不取消引用指针的情况下调用赋值运算符。

而使用这种设计,做浅拷贝的风险是巨大的。此外,C++ 赋值运算符签名是:“执行 & 运算符 = (...)”,如标准中所述。它必须返回对同一对象的引用,以便编译器按照您的预期考虑它。

更多关于赋值运算符......

于 2010-08-02T13:10:07.523 回答