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