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
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++ 代入演算子のシグネチャは、標準に記載されているように「perform & operator = ( ... )」です。コンパイラが期待どおりにそれを考慮するためには、同じオブジェクトへの参照を返す必要があります。

代入演算子の詳細... .

于 2010-08-02T13:10:07.523 に答える
0

また、参照を介して戻る方が安全なので、コピー コンストラクターが呼び出されるのを回避できます。

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

     if (this != &rhs)
     {
       ptr = rhs.ptr; a=rhs.s;
     }
     return * this;
   }
于 2010-08-02T10:43:14.760 に答える