C++如何返回内部类
C++ how to return inner class
我的类设计有一个小问题。我有两个班——应用程序和窗口。应用程序拥有一个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等…)将保持不变。
===>只有应用程序类需要知道它的数据成员是如何组织的,而不需要知道其他的。
相关文章:
- 在设计 SDK 时,我是否应该在 C++ 头文件中完全隐藏内部类?
- 如何声明由多个线程调用的 C++ DLL 的内部类,而无需导出类
- 从内部类继承
- 如何将枚举类转发声明为模板化类的内部类?
- 从内部类中的方法从包含类调用方法
- 从模板化父类中的派生内部类访问受保护的成员变量
- C++模板类的内部类访问
- 使用类模板的内部类模板专用化模板
- 如何使用包含内部类的类实例有效地从内部类访问成员?
- C++ 如何在外部类中声明的内部类中使用变量
- 在C++中将内部类实现为具有名称空间的独立类有什么好处
- 参数化类的别名(或类型定义)内部类
- 从内部类的析构函数调用虚拟函数
- 如何在没有setter的情况下设置类内部类的成员变量?
- 具有相同名称的方法和内部类(错误:.. 与前面的声明冲突)
- C++如何返回内部类
- 在命名空间中,如何定义从内部类返回对象的函数
- 模板方法编译错误,从内部类返回实例
- 阻止返回私有内部类实例
- 返回指向受保护的内部类元素的指针