C++ Primer 学习笔记_106_特殊工具与技术 --局部类
2016-05-12 18:41
337 查看
特殊工具与技术
--局部类
可以在函数体内部定义类,这样的类称为局部类。一个局部类定义了一个类型,该类型只在定义它的局部作用域中可见。与嵌套类不同,局部类的成员是严格受限的。
局部类的所有成员(包括函数)必须完全定义在类定义体内部,因此,局部类远不如嵌套类有用。
实际上,成员完全定义在类中的要求限制了局部类成员函数的复杂性。局部类中的函数很少超过数行代码,超过的话,阅读者会难以理解代码。
类似地,不允许局部类声明 static 数据成员,没有办法定义它们。
1.局部类不能使用函数作用域中的变量
局部类可以访问的外围作用域中的名字是有限的。局部类只能访问在外围作用域中定义的类型名、static 变量和枚举成员,不能使用定义该类的函数中的变量:
int a,val; void foo(int val) { static int si; enum Loc {a = 1024,b}; class Bar { public: Loc locVal; int barVal; void fooBar(Loc l = a) //OK { barVal = val; //Error,打算使用的函数形参内的val,不行! barVal = ::val; //OK,使用的是全局变量val barVal = si; //OK,使用的static变量 locVal = b; //OK,使用的是enumerator } }; }
2.常规保护规则适用于局部类
外围函数对局部类的私有成员没有特殊访问权,但是,局部类可以将外围函数设为友元.
[实践]
实际上,局部类中private成员几乎是不必要的,通常局部类的所有成员都是public成员.局部类封装在它的局部作用域中,进一步通过信息隐藏进行封装是不必要的.
3.嵌套的局部类
可以将一个类嵌套在局部类内部。这种情况下,嵌套类定义可以出现在局部类定义体之外,但是,嵌套类必须在定义局部类的同一作用域中定义。照常,嵌套类的名字必须用外围类的名字进行限定,并且嵌套类的声明必须出现在局部类的定义中:
void foo(int val) { class Bar { public: //... class Nested; }; class Bar::Nested { //... }; }<span style="margin: 0px; padding: 0px; font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>
嵌套在局部类中的类本身是一个带有所有附加限制的局部类.嵌套类的所有成员必须在嵌套类本身定义体内部定义.
相关文章推荐
- C++ Primer 学习笔记_105_特殊工具与技术 --联合:节省空间的类
- C++ Primer 学习笔记_104_特殊工具与技术 --嵌套类
- C++Primer学习笔记103 特殊工具与技术 类成员指针
- C++ Primer 学习笔记_102_特殊工具与技术 --运行时类型识别[续]
- C++ Primer 学习笔记_101_非一般工具与技术 -运行时类型识别
- C++ Primer 学习笔记_100_特殊工具与技术 优化内存分配[续2]
- C++ Primer 学习笔记_99_非一般工具与技术 -优化内存分配[续1]
- C++ Primer 学习笔记_98_非一般工具与技术 -优化内存分配
- C++ Primer 学习笔记_97_用来大型程序的工具 -多重继承与虚继承[续2]
- C++ Primer 学习笔记_96_用以大型程序的工具 -多重继承与虚继承[续1]
- C/C++ 中生成特定范围内的随机数
- C++ Primer 学习笔记_95_用来大型程序的工具 -多重继承与虚继承
- C语言封装线程与日志类
- C C++编程产生指定范围内的随机数
- 编译4.7.2的gcc的针对libstdc++的configure解读
- 顺序队列C/C++实现
- leetceode_8_String to Integer (atoi)_(C++)(easy)
- c语言文件操作
- C语言文件读写操作总结
- C++与Java比较