✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
📚专栏地址:C/C++知识点
📣专栏定位:整理一下 C++ 相关的知识点,供大家学习参考~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
🎏唠叨唠叨:在这个专栏里我会整理一些琐碎的 C++ 知识点,方便大家作为字典查询~
嵌套类和局部类
嵌套类
外围类需要使用嵌套类对象作为底层实现,并且该嵌套类只用于外围类的实现,且同时可以对用户隐藏该底层实现。
从作用域的角度看,嵌套类被隐藏在外围类之中,该类名只能在外围类中使用。如果在外围类之外的作用域使用该类名时,需要加名字限定。
嵌套类中的成员函数可以在它的类体外定义。
嵌套类的成员函数对外围类的私有成员没有访问权,反之亦然。
嵌套类仅仅只是语法上的嵌入。
注意:老版本的C++和部分C++编译器是不能使用嵌套类这一特性的。
嵌套类基本语法结构:
class 外围类名 {//类体
class 嵌套类名{//类体
};
};
嵌套类的特点:
- 嵌套类不可以访问外围类的任何成员
- 外围类可以通过对象访问嵌套类的公有成员,但不能访问保护和私有成员。
- 嵌套类只能由外围类使用
局部类
类也可以定义在函数体内,这样的类被称为局部类。局部类只在定义它的局部域内可见。
局部类的成员函数必须被定义在类体中。
局部类中不能有静态成员函数。
在实践中,局部类很少使用。
局部类基本语法结构:
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;
}