C++局部类的最主要特点是能对外隐藏实现,与java的嵌套类是一个概念。由于不能访问外部类的成员,能力还是比较弱的。
局部类(Local Classes)
- 在函数内部定义的类为局部类,专为函数内部使用,以实现某种功能,一般来说可以用外部类代替,但局部类也有一些自身的特征
- 局部类不能定义static成员变量,也不能访问函数内部类外部的non-static局部变量,而且可以使用函数模板的模板参数
- 外部不能继承一个隐藏在函数内部的局部类
Example
#include <iostream>
using namespace std;
class Base {
public:
Base() { cout << "create Base" << endl; }
virtual ~Base() { cout << "delete Base obj" << endl; }
};
template< typename T >
Base* Create( T dat )
{
// 模板函数内定义的Derived是Local类
class Derived : public Base {
public:
Derived( T t ) : data( t )
{
cout << "create Derived" << endl;
cout << "data : " << data << endl;
}
~Derived() { cout << "delete Derived obj" << endl; }
private:
T data;
};
// 返回派生类对象的指针,只能用此函数间接产生
return new Derived(dat);
}
int main()
{
Base* p = Create(5);
delete p;
cout << "\n";
p = Create("suninf");
delete p;
return 0;
}