前言
简单记录一下C++中的内部类和局部类相关知识,方便后续自己查阅或学习。
正文
内部类
在一个类A内部定义另外一个类B,那么类B就可以成为内部类,内部类又叫嵌套类。
内部定义跟类定义一样,没有任何差异,除了放在类中。
- class BiuMall {
- public:
- class BiuStore {
- private:
- float score;
- public:
- int number;
- //score私有的,因此提供方法进行访问
- void setSocre(float score) {
- this->score = score;
- }
- float getScore() {
- return score;
- }
- };
- //定义内部类对象
- BiuStore biuStore;
- void setNumber(int number) {
- biuStore.number = number;
- }
- void setScore(int score) {
- //biuStore.score = score; //错误,不可以访问内部类私有变量
- biuStore.setSocre(score);
- }
- void printfInfo() {
- std::cout << biuStore.number << " --> " << biuStore.getScore() << std::endl;
- }
- };
上面BiuStore是一个内部类。
外部内不能访问内部类private修饰的成员函数或成员变量
- void setScore(int score) {
- //biuStore.score = score; //错误,score是private修饰的,外部类不可以访问内部类私有变量
- biuStore.setSocre(score);
- }
内部类值运行在其外部类中使用,对于其他类中是不可见的
- int main()
- {
- //BiuStore biuStore; //错误,无法直接使用
-
- BiuMall::BiuStore biuStore; //可以,但要这样使用干嘛要定义到类内部呢?
- }
局部类
把定义在函数(或叫方法)中的类叫局部类。
局部类,类如其名,作用域直在局部范围。
- int main()
- {
- int age = 5;
- static int age_static = 10;
-
- //局部类
- class BiuMall{
- public:
- //static int number_static; //错误,不允许静态数据成员声明
- int number;
- void pintfInfo() {
- std::cout << number << std::endl;
- std::cout << age_static << std::endl;
- //std::cout << age << std::endl; //错误: 不允许引用封闭函数的局部变量
- }
- static int getNumber();
- };
-
- //错误,不能在成员函数 的类外部重新声明该函数
- //int BiuMall::getNumber() {
- // return 1;
- //}
-
- BiuMall biumall;
- biumall.number = 1;
- biumall.pintfInfo();
- }
-
- void test() {
- // BiuMall biumall; // 错误,找不到BiuMall的定义
- }
上面的BiuMall就是一个局部类,定义在main()中。
作用仅在函数内部使用
所有的成员(成员变量或函数)只能定义在内部
不允许定义static成员变量
除了static变量,局部类不可以访问函数的局部变量。
参考文
《C++从入门到精通(第6版)》
《
© 版权声明