嵌套类和局部类
嵌套类
外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,且同时可以对用户隐藏该底层实现。
从作用域的角度看,嵌套类被隐藏在外围类之中,该类名只能在外围类中使用。如果在外围类之外的作用域使用该类名时,需要加名字限定。
嵌套类中的成员函数可以在它的类体外定义。
嵌套类的成员函数对外围类的私有成员没有访问权,反之亦然。
嵌套类仅仅只是语法上的嵌入。
注意:老版本的C++和部分C++编译器是不能使用嵌套类这一特性的。
嵌套类基本语法结构:
class 外围类名 {//类体 class 嵌套类名{//类体 }; };
嵌套类的特点:
- 1.嵌套类不可以访问外围类的任何成员
- 2.外围类可以通过对象访问嵌套类的公有成员,但不能访问保护和私有成员。
- 3.嵌套类只能由外围类使用
局部类
类也可以定义在函数体内,这样的类被称为局部类。局部类只在定义它的局部域内可见。
局部类的成员函数必须被定义在类体中。
局部类中不能有静态成员函数。.
在实践中,局部类很少使用。
局部类基本语法结构:
type funcName(parameter list) {//函数 class 局部类名{//类体 }; };
案例
#include <iostream> using namespace std; class OuterClass {//外部类 public: class InnerClass {//嵌套类 public: void func();//嵌套类的func方法 }; public: InnerClass obj; void func() {//外部类的func方法 cout << "OuterClass func()" << endl; obj.func(); } }; void OuterClass::InnerClass::func() { //嵌套类func方法具体实现 cout << "InnerClass func()" << endl; } void func() { class LocalClass {//局部类 public: int num; void setNum(int n) { num = n; } void showNum() { cout << "num=" << num << endl; } }; LocalClass lc; lc.setNum(111); lc.showNum(); } int main() { OuterClass oc1; oc1.func(); cout << "---------------------" << endl; OuterClass::InnerClass ic1; ic1.func(); cout << "---------------------" << endl; func(); return 0; }