C++ class 变量在赋值后不改变

C++ class variable not changes after assignment

我有两个 classes,一个是另一个中的私有变量。 私有成员有一个基数 class,它有一个变量作为私有成员。 代码如下:

#include <iostream>

class Base {
    public:
  Base(): _p(5) {
      
  }
    
  void setP(int p) {
      _p = p;
  }
  
  int p() const {
      return _p;
  }
private:
  int _p = 0;
};

class Test:  public Base {
    public:
  Test(): Base() {
  }
  
  Test operator=(const Test & self) {
      Test cloned;
      cloned.setP(self.p());
      return cloned;
  }
};

class Test2:  public Base {
    public:
  Test2() {
  }
  
  Test2 operator=(const Test2 & self) {
      Test2 cloned;
      cloned.setTest(self.test());
      return cloned;
  }
  
  Test test() const { return _test; }
  void setTest(const Test & test) { _test = test; }
  
  private:
  Test _test;
};

int main()
{
    Test test;
    test.setP(500);
    
    Test2 newTest;
    newTest.setTest(test);
  
    Test2 newTest2 = newTest;
    std::cout << "p is " << newTest.test().p() << std::endl;
    std::cout << "p2 is " << newTest2.test().p() << std::endl;
}

我查看了代码洞察并看到了一些 operator= 和一些复制构造函数,但我无法弄清楚这是怎么发生的..

当我 运行 这个程序时,我希望输出是这样的:

p is 500                                                                                                          
p is 500

但我明白了:

p is 5                                                                                                               
p is 5

问题出在您的 operator= 上。您创建一个临时 Test 并修改它,但您不修改 this 对象。正确的实现是:

 Test& operator=(const Test& rhs) {
     setP(rhs.p());
     return *this;
 }

另请注意,operator= returns 是引用 Test&,而不是 Test