gpt4 book ai didi

encapsulation - 组合与数据封装

转载 作者:行者123 更新时间:2023-12-01 11:55:50 25 4
gpt4 key购买 nike

如果类A和类B是组合关系,是不是意味着通过A得到的B的具体实例只能通过类A修改,不能破坏类A的数据封装?或者,组合是否仅意味着生命周期绑定(bind),而不是数据封装?

class A
{
B itsB;
B* getB() {return &itsB);
}

void AnotherClass::anyOperation()
{
itsA->getB()->function(); // is this legal ?
}

最佳答案

组合并没有严格规定是否允许在组合类之外修改组合对象的规则。

封装与控制外部世界对类中定义的成员的访问有关。一般来说,一个类的字段不应该被外部代码直接访问,如果遵循这个原则,那么就不会出现允许它被外部代码修改的问题。封装和组合原则上不相关,因此在您的示例中,B 组合成 A 本身的事实并不规定 itsB 不应在 A 之外修改。

但是,您应该考虑 1. 谁拥有对象 itsB? 2. 允许在 A 之外修改是线程安全的吗?它是否破坏了封装?

关于encapsulation - 组合与数据封装,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7403338/

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