C++嵌套类与局部类
2015-10-26 23:29
274 查看
代码编译运行环境:VS2012+Debug+Win32
程序输出结果:
对嵌套类的若干说明:
(1)从作用域的角度来看,嵌套类与外围类是两个完全独立的类,只是主从关系,二者不能相互访问,也不存在友元关系。
(2)从访问权限的角度来看,嵌套类既可为私有,也可为公有。在上面的例子中,嵌套类B的访问权限是public,可以在外围类的成员函数之外使用该嵌套类,使用时加上名字限定。如果将嵌套类B的访问权限设置为private,那么只能在外围类内使用。
(3)嵌套类中的成员函数可以在它的类体外定义。
(4)嵌套类可以访问外围类的静态成员变量,即使它的访问权限是私有的,访问方式通过”ClassName::staticVarName”来直接访问。
程序输出结果:
关于局部类的几点说明:
(1)局部类只能在定义它函数内部使用,在其他地方不能使用。
(2)局部类的所有成员函数都必须定义在类体内,因此在结构上不是特别灵活。
(3)在局部类的成员函数中,可以访问上级作用域的所有变量,如函数局部变量、全局变量等。
(4)局部类中不能定义静态数据成员,因为这种数据成员的初始化无法完成,静态成员数据的定义和初始化必须放在全局作用域。
在实践过程中,局部类很少使用。
[2]陈刚.C++高级进阶教程[M].武汉:武汉大学出版社,2008[4.7(P153-P156)]
1.嵌套类
1.1嵌套类的定义
在一个类体中定义的类叫作嵌套类。拥有嵌套类的类叫外围类。1.2嵌套类的作用
定义嵌套类的初衷是建立仅供某个类的成员函数使用的类类型。目的在于隐藏类名,减少全局的标识符,从而限制用户能否使用该类建立对象。这样可以提高类的抽象能力,并且强调了两个类(外围类和嵌套类)之间的主从关系。1.3嵌套类的使用示例
#include <iostream> using namespace std; class A { public: class B { public: B(char* name){ cout<<"constructing B:"<<name<<endl; } void printB(); }; B b; A():b("In class A"){ cout<<"constructing A"<<endl; } }; void A::B::printB(){ cout<<"B's member function"<<endl; } int main(int argc,char* argv[]) { A a; A::B b("outside of A"); b.printB(); }
程序输出结果:
constructing B:In class A constructing A constructing B:outside of A B's member function
对嵌套类的若干说明:
(1)从作用域的角度来看,嵌套类与外围类是两个完全独立的类,只是主从关系,二者不能相互访问,也不存在友元关系。
(2)从访问权限的角度来看,嵌套类既可为私有,也可为公有。在上面的例子中,嵌套类B的访问权限是public,可以在外围类的成员函数之外使用该嵌套类,使用时加上名字限定。如果将嵌套类B的访问权限设置为private,那么只能在外围类内使用。
(3)嵌套类中的成员函数可以在它的类体外定义。
(4)嵌套类可以访问外围类的静态成员变量,即使它的访问权限是私有的,访问方式通过”ClassName::staticVarName”来直接访问。
2.局部类
2.1局部类的定义
在一个函数体内定义的类称为局部类。局部类可以定义自己的数据成员和函数成员。它也是一种作用域受限的类。2.2使用示例
#include <iostream> using namespace std; int global=100; void func(){ static int s; class A{ //static int t;//编译出错 public: int num; void init(int i){s=i;} void print(){ num=global; cout<<num<<endl; } }; A a; a.init(8); cout<<"s:"<<s<<endl; a.print(); } int main(int argc,char* argv[]) { func(); }
程序输出结果:
s:8 100
关于局部类的几点说明:
(1)局部类只能在定义它函数内部使用,在其他地方不能使用。
(2)局部类的所有成员函数都必须定义在类体内,因此在结构上不是特别灵活。
(3)在局部类的成员函数中,可以访问上级作用域的所有变量,如函数局部变量、全局变量等。
(4)局部类中不能定义静态数据成员,因为这种数据成员的初始化无法完成,静态成员数据的定义和初始化必须放在全局作用域。
在实践过程中,局部类很少使用。
参考文献
[1]http://www.cnblogs.com/dongzhiquan/archive/2011/01/09/1994520.html[2]陈刚.C++高级进阶教程[M].武汉:武汉大学出版社,2008[4.7(P153-P156)]
相关文章推荐
- C++ 实现类似Notepad++ Ctrl+F 的搜索功能
- C++:文件的输入和输出
- C++面试常见题目问与答(汇总一)
- C++Primer笔记一
- C++:流类库与输入输出
- c++类继承的成员可见性
- C++:异常的处理
- C++:类模板与模板类
- 对C++中I/O流的概念及流类库结构的认识
- 程序转化语意学 Program Transformation Semantics
- C语言基础(九)结构体、补充typedef用法
- C语言基础(八)字符串
- C++:函数模板与模板函数
- C语言基础(五)函数、多文件开发
- 奇偶分割数组(LintCode)
- 关于将函数的地址作为参数传递给另一个函数调用
- MFC中非模态对话框不响应PreTranslateMessage函数的解决方法
- 对C++中Boost库的认识
- PeekMessage和GetMessage
- C++:纯虚函数与抽象类