我有如下类
class A
{
private:
B b;
}
class B
{
private:
C c;
D d;
}
C和D是存储类,主要包含结构和数据结构。 B 将两者包裹在一起。我想知道如果我有对象 A,获取数据 C 和 D 或执行函数的更好方法是什么?
For example:
class A
{
private:
B b;
public:
B* GetB() { return &b;}
};
class B
{
private:
C c;
D d;
public:
C* GetC() {return &c;}
D* GetD() {return &d;}
};
class C
{
public:
functionA();
};
A a;
B* b = a.GetB();
C* c = b->GetC();
c->functionA();
或
我根本不应该公开对象 B:
class A
{
private:
B b;
public:
C* GetC() { return &b.GetC();}
D* GetD() { return &b.GetD();}
};
A a;
C* c = a.GetC();
c->functionA();
或
我不应该公开对象 B、C 和 D
class A
{
private:
B b;
public:
void performFunctionA() { b.performFunctionA(); }
};
class B
{
private:
C c;
D d;
public:
void performFunctionA() { c.functionA();}
};
class C
{
public:
functionA();
};
A a;
a.performFunctionA();
为什么我们要选择一个而不是另一个?
谢谢
最佳答案
良好的封装意味着您应该尽可能少地公开实现细节。在您的情况下,这意味着支持您的最后一个选项并且不公开 B
、C
或 D
。这样,B
、C
和 D
的任何更改都可以与 A
的用户隔离。
关于c++ - 关于类互动的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6301496/