69988


C++で明示的にコピーコンストラクタ・代入演算子を実装したいのですが、  
代入が出来なくて悩んでいます。  
コンパイル自体は通ります。

[code]

    class A
    {
    public:
        int x;
    
        A() : x(0) {}
        A(int x) : x(x) {}
        A(const A& other) : A(other.x) {}
        A& operator=(const A& rhs)
        {
            return *this; //良く見かける書き方
            //return A(rhs); // 試したけど駄目
            //return *(new A(rhs)); // 試したけど駄目
        }
    };
    
    A _g = A(30);
    int main()
    {
        A a(10);
        A b(20);
        A c = a;    // OK
        b = a;      // Not Assigned
        _g = a;     // Not Assigned
    
    }
    
[/code]

環境：  
IDE： **Visual Studio 2019**  
C++言語標準： **ISO C++17 標準**


CC BY-SA 4.0
2020-08-30T06:08:42.377
69984
2020-08-30T07:48:16.533
2020-08-30T06:28:08.613
38351
38351
question
c++
C++でオーバーロードしたoperator=が正しく動作しない


やりたいことって

[code]

    A& operator=(const A& rhs)
    {
        x = rhs.x;
        return *this;
    }
    
[/code]

ですよね？  
代入した際のメンバ変数に対する処理も記述しないと何もされません。  
Visual Studio 2019
を使用されているのであればデバッガでステップ実行して、b=aの行でステップインして動作を追ってみると、何が起こっているか見ることができます。


CC BY-SA 4.0
2020-08-30T07:48:16.533
69988
2020-08-30T07:48:16.533
9515
69984
answer