【发布时间】:2018-04-19 07:17:07
【问题描述】:
我有以下课程
class A {
private:
B b;
public:
A();
}
class B {
public:
void foo();
void bar();
void foz();
........
}
B 有很多方法。有时需要 A 类的“客户”使用 B 类的方法。我可以返回 B 的引用,但在这种情况下,我应该返回 const 引用,因为返回私有对象的非常量引用并不好编程。如果引用是 const,则无法调用 foo、bar 等,因为它们不是 const。因此,唯一“干净”的方法似乎是使用委托给 B 在 A 中重新创建相同的接口。但是这种方法并不是很好,因为我应该在 A 中重新创建所有接口。作为替代方案,我可以在 A 中将 B 设置为 public,但是它对我来说似乎“奇怪”。这种情况我该怎么办?
【问题讨论】:
-
为什么不使用继承?
-
返回非常量引用并不是“糟糕的编程”。参见例如
std::vector是元素访问运算符。您始终可以创建 两个 "getter" 函数来获取B对象,一个标记为const的函数返回一个const引用,另一个返回一个非常量引用。然后编译器会自动选择正确的使用。 -
可能不好的是使用“getters”会破坏一些封装。但它是否真的“坏”取决于您的设计和用例。
-
元素访问运算符提供非常量引用,因为您可以根据该值更改向量的值
-
如果你是直接调用B函数,那为什么要创建A对象直接使用B对象。否则如果A类的客户想通过A对象调用B函数,那么设计上有一些缺陷
标签: c++ design-patterns