如何使用局部类(local class)什么时候使用局部类

ZDNet软件频道 时间:2004-05-31 作者:Builder.com |  我要评论()
本文关键词:cpptips
C++ 不支持嵌套函数。然而,一个与嵌套函数不同但更加晦涩的特性,局部类(local class),能够让我们模拟嵌套函数这一特性。下面我将说明如何使用这一特性,以及什么时候应该使用这一特性。
本文译自Builder.com,未经许可请勿转载

C++ 不支持嵌套函数。然而,一个与嵌套函数不同但更加晦涩的特性,局部类(local class),能够让我们模拟嵌套函数这一特性。下面我将说明如何使用这一特性,以及什么时候应该使用这一特性。

对于一个命名空间作用域中声明的一般类,在缺省情况它具有外部连接(linkage),并且其外部连接对于程序的任何模块都是可见的。相反,在一个局部作用域定义的类,是没有外部连接的,正如下面的例子所示。因此,它对于其它任何作用域都是不可见的。

intgettime()
{
 class Time //a local class inside a function
 {
 public:
  std::time_tcurrentTime() const
  {
  return std::time(0);
  }
 };//Time
 return Time().currentTime();
}

局部类的属性

局部类可以有一些成员函数、一些构造函数、一个析构函数和一些数据成员,但是它不能具有静态数据成员。此外,局部类的所有成员函数都必须在它们的类定义中定义。

局部类的应用

局部类对于隐藏实现细节是非常有用的。如果客户得到一个包含gettime() 函数的二进制文件,那么他只能看到gettime() 函数的原型,而不能看到它是如何实现的。通过定义局部类,你可以在不暴露底层实现的情况下发布二进制文件和函数原型。另外,局部类作为“辅助对象(helper object)”也是很有用的,所谓辅助对象,是指执行非常具体的操作的特定类的实例,比如执行计算、转换等操作,这类非常具体的操作只在某一地方才必要。注意除了局部类之外,还可以定义局部结构体(struct)、局部联合(union)和局部枚举(enum)等类型。

通过把逻辑步骤或计算分解到单个的局部类中,我们就可以在不暴露实现细节的情况下实现更高层次的模块化。而且,因为局部类没有连接(linkage),所以它的名字以及它的成员的名字不会传播到其它命名空间,因此可以最大限度地降低命名冲突的风险。局部类的不足之处在于它们不能重用。


本文作者:Danny Kalev是一位系统分析员、软件工程师,他具有14年在 C++ 和面向对象设计方面的经验。


责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134