C++如何返回内部类

C++ how to return inner class

本文关键字:返回 内部类 何返回 C++      更新时间:2023-10-16

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

1) 将窗口添加到专用应用程序范围在这种情况下,我必须添加方法getWindow(),它会将Window对象返回给用户,以允许对其进行操作(调用其方法)。

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

2) 将窗口添加到公共应用程序范围并访问窗口类似:

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

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

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

第一个选项更复杂:

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;
}

在我看来,第一种方法是唯一的好方法。

但是要小心返回Window引用而不是Window对象。如果返回一个对象,将构造该对象的副本,并且不再操作原始对象。

我之所以只喜欢第一种方式(通常也是为什么在教科书中你会发现"不要从外部访问数据成员"):在返回值(在这种情况下是对象引用)之前,你可以根据自己的意愿对其进行操作。例如,您需要实现自己的窗口类。如果您使用getter函数返回它,您仍然可以将它强制转换为原始窗口类,因此代码的其余部分(只需要setTitle等…)将保持不变。

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