gpt4 book ai didi

c++ - 对象可以更改其他对象的私有(private)数据吗?

转载 作者:行者123 更新时间:2023-11-30 01:45:41 25 4
gpt4 key购买 nike

如果 C 类可以容纳另一个 C 对象,那么该子类是否可以更改其父类的私有(private)数据成员?

下面的代码有效,但我不确定我正在做的事情是否有危险。 (即未定义的行为)

class C {
public:
C(C *parent, int num) : _parent(parent), _i(num), _child(nullptr) {}
~C() {
if(_child) {
delete _child;
_child = nullptr;
}
}

int get() const { return _i; }

void addChild() {
if(!_child) _child = new C(this, 0);
}

C* getChild() {
return _child;
}

void setParent(int num) {
_parent->_i = num; //accessing parent private data
}

private:
int _i;
C *_parent;
C *_child;
};

int main()
{
C c(nullptr, 1);
c.addChild();
c.getChild()->setParent(25);

std::cout << c.get() << "\n"; //output is 25 as expected

system("pause");
return 0;
}

最佳答案

是的,它可以。 private 成员可以被同一类的实例访问。实例可以访问另一个实例数据。

例如,这就是移动构造函数/赋值运算符的工作方式:窃取数据并将其从原始对象中删除以避免对相同数据的双重引用。

关于c++ - 对象可以更改其他对象的私有(private)数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34251153/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com