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
。
我有两个 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
。