C ++如何返回内部类

时间:2013-12-17 13:25:11

标签: c++

我的班级设计有一个小问题。我有两个类 - 应用程序和窗口。应用程序拥有一个窗口。现在我有两种方法来编写它。

1)将Window添加到Application的私有范围 在这种情况下,我必须添加方法getWindow(),它将Window对象返回给用户以允许用它进行操作(调用它的方法)。

Application app;
app.getWindow().setTitle( "..." );

2)将Window添加到Application的公共范围 并访问窗口,如:

Application app;
app.window.setTitle( "..." );

如果是简单的语言类型(bool,int,...),我会选择第一种方法而不问......

这两种方式中哪一种更好用?谢谢你的建议。

2 个答案:

答案 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等)将保持不变。

==>只有应用程序类需要知道其数据成员的组织方式,而不是其他任何人。