我的班级设计有一个小问题。我有两个类 - 应用程序和窗口。应用程序拥有一个窗口。现在我有两种方法来编写它。
1)将Window添加到Application的私有范围 在这种情况下,我必须添加方法getWindow(),它将Window对象返回给用户以允许用它进行操作(调用它的方法)。
Application app;
app.getWindow().setTitle( "..." );
2)将Window添加到Application的公共范围 并访问窗口,如:
Application app;
app.window.setTitle( "..." );
如果是简单的语言类型(bool,int,...),我会选择第一种方法而不问......
这两种方式中哪一种更好用?谢谢你的建议。
答案 0 :(得分:2)
第一个选项更复杂:
Window& Application::getWindow() {
// check for NULL dereference of App object:
ASSERT(this != NULL);
// add trace:
TRACE(__FUNCTION__ " was called!");
// other debug/probing code
#ifdef DEBUG
static int count = 0;
++count
#endif
return window;
}
答案 1 :(得分:1)
在我看来,第一个是唯一的好方法。
但要注意返回Window引用而不是Window对象。如果返回一个对象,则将构造该对象的副本,并且您不再操纵原始对象。
之所以我更喜欢第一种方式(通常为什么你在教科书中找不到“从extern访问数据成员”):在返回值之前(在这种情况下是对象引用)你可以像你一样操作它想。例如,您需要实现自己的窗口类。如果你使用getter函数返回它,你仍然可以将它转换为原始窗口类,因此其余代码(只需要setTitle等)将保持不变。
==>只有应用程序类需要知道其数据成员的组织方式,而不是其他任何人。