C++语法之内部类和局部类

本文首发于个人博客

内部类

  • 如果将类A定义在类C的内部,那么类A就是一个内部类(嵌套类)
  • 内部类的特点
    • 支持public、protected、private权限
    • 成员函数可以直接访问其外部类对象的所有成员(反过来则不行)
    • 成员函数可以直接不带类名、对象名访问其外部类的static成员
    • 不会影响外部类的内存布局
    • 可以在外部类内部声明,在外部类外面进行定义

如下的Car类就是Person类的内部类

1
2
3
4
5
6
7
8
9
10
class Person {
private:
int m_age;

public:
class Car {
private:
int m_price;
};
};

局部类

  • 在一个函数内部定义的类,称为局部类
  • 局部类的特点
    • 作用域仅限于所在的函数内部
    • 其所有的成员必须定义在类内部,不允许定义static成员变量
    • 成员函数不能直接访问函数的局部变量(static变量除外)

如下Car类就属于局部类

void test() {
    static int age = 10;

    // 局部类
    class Car {
    public:
        void run() {
            age = 20;
        }
    };

    Car car;
    car.run();
}